ラック
Home > ブログ > 記事 > 2018年9月 > PHPからMastodon APIを叩くテスト

PHPからMastodon APIを叩くテスト

カテゴリ: プログラム

Twitterのユーザーストリーミング廃止とAPI制限の強化に伴い、botをMastodonに移行できないかと考えて、Mastodon APIを叩く方法を模索してみました。

よく使われているAPIは下記の「MastodonOAuthPHP」の模様。

こちらに関してありがたいことにサンプルを掲載した記事があるのでその内容を参照してテストを実行しました。

ちなみにPackagistにもあるので、composerでも扱えそうです。PHP開発者的には嬉しいですね。

テスト1

ということで、これを試してみます。とりあえずできるかどうかのテストなので、手順は完全にねんでぶろぐ様の内容をそのままなぞるだけ。

いくつかのphpファイルを使ってAPIの権限を取得したことをアカウント設定画面で確認

きちんと認証されて、

日本語トゥートもできることを確認

テストのトゥートもできました。追記にもある通り、phpファイルのエンコードをBOMなしのUTF-8にすれば日本語でもOKですね。

テスト2

こちらの方法でもできないかテスト。その前に普通にログインしてアカウントの設定画面を開くと、「開発」のところにAPIキーを生成できそうな項目があるのでそちらで実験。

アカウントの「設定」→「開発」→「アプリ」と進んだところ

「新規アプリ」ボタンをクリック。

「新規アプリ」ボタンをクリック

適当に項目を入力、権限は「read」「write」のみとします。

アプリ作成完了

作成完了。

クアライアントキーなど3つを控える

リンクをクリックするとAPIキーやトークンが生成されています。これで行けそうですね。

これで下記のようなコードを書いてもトゥートできたので、大丈夫そうです。


<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();
$t->setMastodonDomain("mstdn.jp");
$t->setCredentials([
    "client_id" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    "client_secret" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    "bearer" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
]);

$statusses = $t->postStatus("テスト");
var_dump($statusses);

トゥートできることを確認

「テスト」と投稿されました。OK。

ちなみに下記のように地のテキストでハッシュタグを付けるとどうなるか。


$statusses = $t->postStatus("テスト #テスト");
var_dump($statusses);

ハッシュタグ付きトゥートできることを確認

普通にハッシュタグ扱いになりました。正式にこれで良いのかどうかは分かりませんが。

テスト3

さらに追加で、メディア付きのトゥートができないか試しました。この場合もねんでぶろぐ様参照で。

ただ、この記事ですと「画像+テキスト」のトゥートが自力ではできなかったので下記の手順でコードを改造。

  1. \theCodingCompany\Mastodonをextendsしたクラスを定義、その中にねんでぶろぐ様の画像付きトゥートのメソッドと、元々のMastodonクラスにあったpostStatusメソッドにmedia_idsパラメータを追加したメソッドの2つ(+ねんでぶろぐ様のmime typeを取得するメソッド)を記述、function.phpなどとする(パラメータについてはdocumentation/API.md at master ・ tootsuite/documentation ・ GitHub参照)
  2. function.phpをrequireした、下記内容のコードtest.phpを用意
  3. test.phpを実行

上記のテストの結果、

画像付きトゥートもできることを確認

画像+テキストのトゥートもできました。


<?php
require_once(__DIR__ . "/function.php");
$t = new mediaMastodon('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); //function.phpの拡張したクラス。コンストラクタでtoken_accessを受け付け、メディア送信に備える
$t->setMastodonDomain("mstdn.jp");
$t->setCredentials([
    "client_id" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    "client_secret" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    "bearer" => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' //上と重複しているが、テキストトゥートの認可のためにもう一度access_token記述
]);

$response = $t->PostMedia( __DIR__ . DIRECTORY_SEPARATOR . 'PATH/TO/IMG.jpg'); //画像をサーバに送信、レスポンスのjsonを取得
var_dump($response);
$statusses = $t->postStatuses("テスト #テスト", $response['id']); //レスポンス中に含まれている画像のidをパラメータに含めた形でトゥート
var_dump($statusses);

テストアカウントではない場所でトゥートできることも確認

ついでと言っては何ですが、テストアカウントではなく本アカでも画像付きトゥートができることを確認しました。また、一通りのコードを下記のリポジトリに置いておきました。

参考

タグ: ネタ,php,SNS,手順

 



関連する記事一覧