PHPでMastodonのAPI Client(あるいはSDK)を書いてみたので、紹介をします ヾ(〃><)ノ゙
この記事を書いたのは高橋会長(@takahashim)のMastodon API gemを使って投稿するにインスパイヤされて。
インストール
BaguettePHP/mastodon-api: Mastodon API Client for PHPは開発中で全部のAPIが網羅されてるわけじゃないけど、投稿APIはあるので投稿はできます。
対応してるPHPのバージョンは5.5以上です。残念ながら5.4系では動きません。
最近のモダンなPHPを意識して書いてるので、インストールにはComposerが必要です。Composerがなければ、Download Composerの通りに手元に持ってきてくださいね。
ここではサンプルコードなので、特定のPHPプロジェクトではなくグローバルインストールしてみることにします。
php composer.phar global require
Changed current directory to /Users/megurine/.composer
Using version ^0.0.1 for zonuexe/mastodon-api
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing respect/validation (1.1.12): Loading from cache
- Installing zonuexe/objectsystem (0.6.0): Loading from cache
- Installing zonuexe/mastodon-api (0.0.1): Loading from cache
respect/validation suggests installing egulias/email-validator (Strict (RFC compliant) email validation)
respect/validation suggests installing malkusch/bav (German bank account validation)
respect/validation suggests installing symfony/validator (Use Symfony validator through Respect\Validation)
respect/validation suggests installing zendframework/zend-validator (Use Zend Framework validator through Respect\Validation)
respect/validation suggests installing fabpot/php-cs-fixer (Fix PSR2 and other coding style issues)
Writing lock file
Generating autoload files
はい、自分のホームディレクトリにインストールできましたね。
設定
.env
ってファイルに情報を書き込みます。適当にぐぐってアプリケーションを作成してください。ぐぐれ。
APP_NAME="PhpMastodon Test"
USERNAME="mail@example.com"
PASSWORD="password"
CLIENT_ID="xxxxxxxxxxxxxxxxxxxxx"
CLIENT_SECRET="yyyyyyyyyyyyyyyyyyyy"
注意
ここで紹介する.env
ファイルを使った設定は検証用のカンタンな仕組みだから、Webアプリとかで利用するときは十分に注意してね。
書き込んでみる
<?php
require_once getenv('HOME') . '/.composer/vendor/autoload.php';
use Baguette\Mastodon as m;
error_reporting(E_ALL);
$config = new m\Config\DotEnvStorage(__DIR__ . '/.env', ['read_only' => false]);
$client = $config->getClientIdAndSecret();
$service = m\session(
'pawoo.net', $client['client_id'], $client['client_secret'],
[
'scope' => 'read write follow',
'grant' => $config->getUsernameAndPassword(),
'authorization' => $config->getAuthorization(),
]
);
// .env ファイルにアクセストークンがなかったときに勝手に書き込んでくれるよ
$config->setAuthorizationFromObject($service->session->authorize());
$config->save();
// やっほーって書き込むよ
$service->postStatus(m\toot('やっほー'));
簡単でしょ?