11 KiB
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.
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 fromMastodon::API
calls.Mastodon::Easy::return_entity
: Contains the response fromMastodon::Easy::API
calls that return a singleMastodon::Easy::Entity
.Mastodon::Easy::return_entities_vector
: Contains the response fromMastodon::Easy::API
calls that return multipleMastodon::Easy::Entity
.
Other types
Mastodon::param
: A single parameter to anMastodon::API
call. Normally you don't need this.Mastodon::parameters
: All parameters to anMastodon::API
call.Mastodon::http_method
: HTTP method of anMastodon::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 ofMastodon::Easy::alert_type
, used for push subscriptions.Mastodon::Easy::time
: Type for time, can be converted totime_point
andstring
.
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.
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.
.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
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.