C++ wrapper for the Mastodon API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tastytea 03f6b944d8
Updated the link to the Mastodon documentation.
6 days ago
examples Added support vor bookmarks (Glitch-Soc) 6 days ago
src Removed const where it has no effect. 6 days ago
tests bugfix: some examples didn't compile with -DWITHOUT_EASY 4 months ago
.drone.yml CI: Updated drone recipe 3 weeks ago
.gitignore preparing changed documentation generation 6 months ago
CMakeLists.txt Tell the compiler to be more pedantic for debug builds. 6 days ago
CONTRIBUTING.md updated contribution guidelines 6 months ago
Doxyfile fixed doxygen recipe 7 months ago
ISSUE_TEMPLATE.md reduced issue template 5 months ago
LICENSE initial commit 11 months ago
README.md Updated the link to the Mastodon documentation. 6 days ago
build.sh fixed build script 9 months ago
build_doc.sh Parameter support, added documentation. 11 months ago

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

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 <string>
#include <mastodon-cpp/mastodon-cpp.hpp>

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

Another simple example

Using the Easy-class.

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

using Mastodon::Easy;

int main()
{
    Easy masto("social.example", "");
    std::string answer;
    masto.get(Mastodon::API::v1::timelines_public, answer);

    for (const std::string &str : Easy::json_array_to_vector(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

Error codes

mastodon-cpp will never use error codes below 11, except 0.

Code Explanation
0 No error
11 Invalid call
12 Not implemented
13 URL changed (HTTP 301 or 308)
14 Aborted by user
15 Network error (curlpp exception)
16 Timeout
100 - 999 HTTP status codes
65535 Unknown error

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

Useful links

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. These packages are automatically built and not tested. Install with dpkg -i or rpm -i, respectively.

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

From source

Dependencies

  • Tested OS: Linux
  • C++ compiler (tested: gcc 5 / 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
  • -DWITHOUT_EASY=ON to not build the Easy abstractions and to get rid of the jsoncpp-dependency (not recommended)
  • -DWITH_EXAMPLES=ON if you want to compile the examples
  • -DWITH_TESTS=ON if you want to compile the tests
  • -DWITH_STATIC=ON If you want a static library along with the dynamic one
  • -DWITH_DOC=ON if you want to compile the HTML reference
  • -DWITH_DEB=ON if you want to be able to generate a deb-package
  • -DWITH_RPM=ON 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
  • 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
  • POST /api/v1/accounts/:id/block
  • POST /api/v1/accounts/:id/unblock
  • POST /api/v1/accounts/:id/mute
  • POST /api/v1/accounts/:id/unmute
  • GET /api/v1/accounts/relationships
  • GET /api/v1/accounts/search
  • POST /api/v1/apps
  • GET /api/v1/blocks
  • 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
  • GET /api/v1/follow_requests
  • POST /api/v1/follow_requests/:id/authorize
  • POST /api/v1/follow_requests/:id/reject
  • POST /api/v1/follows
  • GET /api/v1/instance
  • GET /api/v1/custom_emojis
  • 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
  • GET /api/v1/notifications
  • GET /api/v1/notifications/:id
  • POST /api/v1/notifications/clear
  • POST /api/v1/notifications/dismiss
  • GET /api/v1/reports
  • POST /api/v1/reports
  • GET /api/v1/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/favourite
  • POST /api/v1/statuses/:id/unfavourite
  • POST /api/v1/statuses/:id/pin
  • POST /api/v1/statuses/:id/unpin
  • POST /api/v1/statuses/:id/mute
  • POST /api/v1/statuses/:id/unmute
  • GET /api/v1/timelines/home
  • 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/list
  • POST /api/v1/push/subscription
  • GET /api/v1/push/subscription
  • PUT /api/v1/push/subscription
  • DELETE /api/v1/push/subscription
  • GET /api/v2/search

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 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.