C++ wrapper for the Mastodon API.
This repository has been archived on 2020-05-10. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
tastytea 1432839f48
the build was successful Details
Install rpm-build on CentOS.
2019-04-14 00:11:30 +02:00
examples Added comment to example02. 2019-04-10 20:55:23 +02:00
src Added list of types to readme. 2019-04-13 21:50:20 +02:00
.drone.yml Install rpm-build on CentOS. 2019-04-14 00:11:30 +02:00
.gitignore Updated .gitignore, deleted build.sh. 2019-03-30 22:35:15 +01:00
CMakeLists.txt Version bump 0.101.0. 2019-04-13 22:24:40 +02:00
CONTRIBUTING.md Updated fediverse address. 2019-03-30 22:32:24 +01:00
Doxyfile fixed doxygen recipe 2018-04-19 01:22:39 +02:00
ISSUE_TEMPLATE.md reduced issue template 2018-06-14 11:52:56 +02:00
LICENSE initial commit 2018-01-09 12:36:05 +01:00
README.md Added links to Pleroma and glitch-soc documentation. 2019-04-13 21:59:27 +02:00
build_doc.sh Parameter support, added documentation. 2018-01-13 01:41:30 +01:00

README.md

mastodon-cpp is a C++ wrapper for the Mastodon API. The library takes care of the network stuff. You submit a query and get the raw JSON. You can then put that JSON into easy to use classes.

TODO-list

The ABI will be unstable in versions < 1.0.0

Breaking API changes

I'm currently rewriting key parts of this library. The new API will be incompatible with the old one. The new code will start with the version number 0.100.0. The old code is archived in the branch pre-0.100.0 and will get bug-fixes for a while.

The code on the master-branch is not usable at the moment, stick to the releases, please.

Usage

The HTML reference can be generated with build_doc.sh, if doxygen is installed. It is also available at doc.schlomp.space/mastodon-cpp/. There are examples in examples/.

Most basic example

#include <iostream>
#include <mastodon-cpp/mastodon-cpp.hpp>

int main()
{
    Mastodon::API masto("social.example.com", "auth_token");
    std::cout << masto.get(Mastodon::API::v1::accounts_verify_credentials);
    std::cout << std::endl;
}

Another simple example

Using the Easy-class.

#include <iostream>
#include <string>
#include <mastodon-cpp/mastodon-cpp.hpp>
#include <mastodon-cpp/easy/all.hpp>

using Mastodon::Easy;

int main()
{
    Easy masto("social.example", "");
    return_call ret = masto.get(Mastodon::API::v1::timelines_public);

    for (const std::string &str : Easy::json_array_to_vector(ret.answer))
    {
        Easy::Status status(str);
        std::cout << "  " << status.account().acct() << " wrote:\n";
        std::cout << status.content() << '\n';
    }
}

Compiling your project

A project consisting of one file can be compiled as follows:

g++ -std=c++14 -lmastodon-cpp example.cpp

List of types

Learn more at https://doc.schlomp.space/mastodon-cpp/namespaceMastodon.html and https://doc.schlomp.space/mastodon-cpp/namespaceMastodon_1_1Easy.html.

Return types

  • Mastodon::return_call: Contains the response from Mastodon::API calls.
  • Mastodon::Easy::return_entity: Contains the response from Mastodon::Easy::API calls that return a single Mastodon::Easy::Entity.
  • Mastodon::Easy::return_entities_vector: Contains the response from Mastodon::Easy::API calls that return multiple Mastodon::Easy::Entity.

Other types

  • Mastodon::param: A single parameter to an Mastodon::API call. Normally you don't need this.
  • Mastodon::parameters: All parameters to an Mastodon::API call.
  • Mastodon::http_method: HTTP method of an Mastodon::API call.
  • Mastodon::Easy::event_type: Event types returned in streams.
  • Mastodon::Easy::visibility_type: Describes the visibility of a post.
  • Mastodon::Easy::attachment_type: Describes the type of attachment.
  • Mastodon::Easy::card_type: Describes the type of card.
  • Mastodon::Easy::notification_type: The type of the notification.
  • Mastodon::Easy::stream_event: Type and data of an events returned in streams.
  • Mastodon::Easy::alert_type: Type for a single alert.
  • Mastodon::Easy::alerts: Vector of Mastodon::Easy::alert_type, used for push subscriptions.
  • Mastodon::Easy::time: Type for time, can be converted to time_point and string.

Error codes

Code Explanation
0 No error
22 Invalid argument
78 URL changed (HTTP 301 or 308)
110 Connection timed out
111 Connection refused (check http_error_code)
113 No route to host / Could not resolve host
192 curlpp runtime error
193 curlpp logic error
255 Unknown error

If you use a debug build, you get more verbose error messages.

Install

Packages

Every release includes packages for the package managers of Debian and Red Hat. Gentoo packages are available in an overlay.

Gentoo

Add my repository and install it from there.

eselect repository enable tastytea
echo 'dev-cpp/mastodon-cpp ~amd64' >> /etc/portage/package.keywords/mastodon-cpp
emaint sync -r tastytea
emerge -a dev-cpp/mastodon-cpp

DEB and RPM

Prebuilt DEB and RPM packages for x86_64(amd64) are provided with each release. .deb packages are built on Debian stretch and .rpm packages are built on CentOS 7. These packages are automatically built and not tested. Install with dpkg -i or rpm -i, respectively.

To use the DEB package on Debian stretch, you will need libcurlpp0 from sid.

From source

Dependencies

  • Tested OS: Linux
  • C++ compiler (tested: gcc 6 / 7 / 8)
  • cmake (tested: 3.9 / 3.12)
  • pkgconfig (tested: 0.29)
  • curlpp (tested: 0.8)
  • Optional
    • Easy interface & Examples: jsoncpp (tested: 1.8 / 1.7)
    • Documentation: doxygen (tested: 1.8)
    • DEB package: dpkg (tested: 1.19 / 1.18)
    • RPM package: rpm (tested: 4.14 / 4.12)

Get sourcecode

Release

Download the current release at schlomp.space.

Development version

git clone https://schlomp.space/tastytea/mastodon-cpp.git

Compile

mkdir build
cd build/
cmake ..
make

cmake options:

  • -DCMAKE_BUILD_TYPE=Debug for a debug build
  • -DWITH_EASY=NO to not build the Easy abstractions and to get rid of the jsoncpp-dependency (not recommended)
  • -DWITH_EXAMPLES=YES if you want to compile the examples
  • -DWITH_TESTS=YES if you want to compile the tests
  • -DWITH_DOC=NO if you don't want to compile the HTML reference
  • One of:
    • -DWITH_DEB=YES if you want to be able to generate a deb-package
    • -DWITH_RPM=YES if you want to be able to generate an rpm-package

You can run the tests with ctest .. inside the build directory. To install, run make install.

Packages

DEB and RPM

Compile with -DWITH_DEB=ON or -DWITH_RPM=ON. Run make package from the build directory to generate a DEB/RPM package.

Other

Run make package from the build directory to generate a tar.gz archive.

Status of implementation

Feature complete as of Mastodon 2.6.1

  • GET /api/v1/accounts/:id
  • POST /api/v1/accounts
  • GET /api/v1/accounts/verify_credentials
  • PATCH /api/v1/accounts/update_credentials
  • GET /api/v1/accounts/:id/followers
  • GET /api/v1/accounts/:id/following
  • GET /api/v1/accounts/:id/statuses
  • POST /api/v1/accounts/:id/follow
  • POST /api/v1/accounts/:id/unfollow
  • GET /api/v1/accounts/relationships
  • GET /api/v1/accounts/search
  • POST /api/v1/apps
  • GET /api/v1/apps/verify_credentials
  • GET /api/v1/blocks
  • POST /api/v1/accounts/:id/block
  • POST /api/v1/accounts/:id/unblock
  • GET /api/v1/custom_emojis
  • GET /api/v1/domain_blocks
  • POST /api/v1/domain_blocks
  • DELETE /api/v1/domain_blocks
  • GET /api/v1/endorsements
  • POST /api/v1/accounts/:id/pin
  • POST /api/v1/accounts/:id/unpin
  • GET /api/v1/favourites
  • POST /api/v1/statuses/:id/favourite
  • POST /api/v1/statuses/:id/unfavourite
  • GET /api/v1/filters
  • POST /api/v1/filters
  • GET /api/v1/filters/:id
  • DELETE /api/v1/filters/:id
  • GET /api/v1/follow_requests
  • POST /api/v1/follow_requests/:id/authorize
  • POST /api/v1/follow_requests/:id/reject
  • GET /api/v1/suggestions
  • DELETE /api/v1/suggestions/:account_id
  • GET /api/v1/instance
  • GET /api/v1/lists
  • GET /api/v1/accounts/:id/lists
  • GET /api/v1/lists/:id/accounts
  • GET /api/v1/lists/:id
  • POST /api/v1/lists
  • PUT /api/v1/lists/:id
  • DELETE /api/v1/lists/:id
  • POST /api/v1/lists/:id/accounts
  • DELETE /api/v1/lists/:id/accounts
  • POST /api/v1/media
  • PUT /api/v1/media/:id
  • GET /api/v1/mutes
  • POST /api/v1/accounts/:id/mute
  • POST /api/v1/accounts/:id/unmute
  • POST /api/v1/statuses/:id/mute
  • POST /api/v1/statuses/:id/unmute
  • GET /api/v1/notifications
  • GET /api/v1/notifications/:id
  • POST /api/v1/notifications/clear
  • POST /api/v1/notifications/dismiss
  • POST /api/v1/push/subscription
  • GET /api/v1/push/subscription
  • PUT /api/v1/push/subscription
  • DELETE /api/v1/push/subscription
  • GET /api/v1/reports (Deprecated)
  • POST /api/v1/reports
  • GET /api/v1/scheduled_statuses
  • GET /api/v1/scheduled_statuses/:id
  • PUT /api/v1/scheduled_statuses/:id
  • DELETE /api/v1/scheduled_statuses/:id
  • GET /api/v1/search (Deprecated)
  • GET /api/v2/search
  • GET /api/v1/statuses/:id
  • GET /api/v1/statuses/:id/context
  • GET /api/v1/statuses/:id/card
  • GET /api/v1/statuses/:id/reblogged_by
  • GET /api/v1/statuses/:id/favourited_by
  • POST /api/v1/statuses
  • DELETE /api/v1/statuses/:id
  • POST /api/v1/statuses/:id/reblog
  • POST /api/v1/statuses/:id/unreblog
  • POST /api/v1/statuses/:id/pin
  • POST /api/v1/statuses/:id/unpin
  • GET /api/v1/timelines/home
  • GET /api/v1/conversations
  • GET /api/v1/timelines/public
  • GET /api/v1/timelines/tag/:hashtag
  • GET /api/v1/timelines/list/:list_id
  • GET /api/v1/streaming/user
  • GET /api/v1/streaming/public
  • GET /api/v1/streaming/public/local
  • GET /api/v1/streaming/hashtag
  • GET /api/v1/streaming/hashtag/local
  • GET /api/v1/streaming/list
  • GET /api/v1/streaming/direct

Glitch-Soc support

  • max_toot_chars in /api/v1/instance
  • GET /api/v1/bookmarks
  • POST /api/v1/statuses/:id/bookmark
  • POST /api/v1/statuses/:id/unbookmark

Copyright

Copyright © 2018, 2019 tastytea <tastytea@tastytea.de>.
License GPLv3: GNU GPL version 3 <https://www.gnu.org/licenses/gpl-3.0.html>.
This program comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.