【投稿編】Mastodon (マストドン) PHPで外部から投稿してみようかとテストをしてみました


最近話題の「Mastodon」(マストドン)ですが、勉強がてら さっそく外部から投稿してみようかとテストをしてみました。

今回利用するのはこれです。

PHP Library for Mastodon REST API (GPL)
https://github.com/TheCodingCompany/MastodonOAuthPHP

【手順】
①ローカル環境に設置
②各ファイル内で環境設定します。
③アプリを作成
④認証してコードを取得
⑤コードから access_tokenで使う bearer を取得する
⑥登録確認
⑦トゥートてしてみる

 

ローカル環境に設置

ダウンロードした Mastodon REST API を解凍してローカル環境に設置します。
フォルダ名は「mastodon」にしましたので 「http://localhost/mastodon」 でアクセスできるようになりました。
※以下、このURLで説明します。

また、空(カラ) の index.php を用意してください。
後ほど内容を書き換えながら進めていきます。

 
 

環境設定

以下のファイルを環境にあわせて変更してください。

インスタンス設定

Mastodon.php

/**
 * Construct new Mastodon class
 */
public function __construct($domainname = "mastodon.social") {

ここの「mastodon.social」を、利用するインスタンスのドメインに変更します。

oAuth.php

/**
 * Our API to use
 * @var type 
 */
private $mastodon_api_url = "mastodon.social";

ここの「mastodon.social」を、利用するインスタンスのドメインに変更します。

アプリ設定

/**
 * App config
 * @var type 
 */
private $app_config = array(
	"client_name"   => "MastoTweet",
	"redirect_uris" => "urn:ietf:wg:oauth:2.0:oob",
	"scopes"	=> "read write",
	"website"	=> "https://www.thecodingcompany.se"
);

ここでは 「client_name」と「website」を変更します。

 
 

アプリを作成

ここから テストサンプルとして「nendeb」アプリとして進めます。
以下のコードを index.php に張り付けてください。

<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();
$token_info = $t->createApp("nendeb", "https://nendeb.com");
var_dump($token_info);

http://localhost/mastodon に アクセス してください。

ここで表示される「client_id」と「client_secret」(各64文字)を以下にはりつけます。

oAuth.php

/**
 * Holds our client_id and secret
 * @var array 
 */
private $credentials = array(
	"client_id"	=> "",
	"client_secret"	=> "",
	"bearer"	=> ""
);

 
 

認証してコードを取得

アプリを認証して authorization token 取得します。
以下のコードを index.php に張り付けてください。(前のコードは消してください)

<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();

//Get the authorization url
$auth_url = $t->getAuthUrl();
echo '<a href="' . $auth_url . '">Get authorization token</a>';

http://localhost/mastodon に アクセス してください。
「Get authorization token」のリンクが出てきますのでクリックします。

「アプリ nendeb があなたのアカウントへのアクセスを要求しています・・・」と出てきますので「承認」ボタンを押します。

出てくる「authorization tokenコード」をコピーしといてください。

 
 

bearer を取得する

「authorization tokenコード」から access_tokenで使う bearer を取得します。
以下のコードを index.php に張り付けてください。(前のコードは消してください)
先ほどコピーした「authorization tokenコード」を貼り付けます。

<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();

//Request the bearer token
$token_info = $t->getAccessToken("079163e60a5fa ~省略~ acd6266d0a2e0");
var_dump($token_info);

http://localhost/mastodon に アクセス してください。


ここで表示されるコードを bearer に張り付けてください。
oAuth.php

/**
 * Holds our client_id and secret
 * @var array 
 */
private $credentials = array(
	"client_id"	=> "1f495fe295a2ecc80bf ~省略~ 723149f1d9c2ceb59fed3",
	"client_secret"	=> "ec6ba4655e6865aee0f ~省略~ 21bf94fc4a34a20df15a0",
	"bearer"	=> "cda15d40ed2fa3eca0b ~省略~ a742365457f5b304d2009"
);

これで準備ができました。

 



 

登録確認

以下のコードを index.php に張り付けてください。(前のコードは消してください)

<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();

$bearer_token = $t->authenticate("メールアドレス", "バスワード");
var_dump($bearer_token);

※メールアドレス, バスワードは登録しているインスタンスのアカウントです。

http://localhost/mastodon に アクセス してください。


app_configの所に作ったアプリを表示されてたらOKです。
※表示するまで 1分くらいかかります。


こちらでも確認できます。

 
 

Toot用の関数を追加

「Mastodon REST API」にはToot用の関数が無かったので勝手に追加します。class Mastodon内に入れてください。

Mastodon.php

	/**
	 * Posting a new status 仮
	 */
	public function PostStatuses($toot=null){

		if( $toot ){
			//Create our object
			$http = HttpRequest::Instance($this->getApiURL());
			$statusses = $http::Post(
				"api/v1/statuses",
				array(
					'status'	=> $toot,
					'visibility'	=> 'public'
				),
				$this->getHeaders()
			);
			if(is_array($statusses) && count($statusses) > 0){
				return $statusses;
			}
		}
		return false;
	}

 



 

Tootテスト

では、トゥートしてみます。日本語はだめです。
以下のコードを index.php に張り付けてください。(前のコードは消してください)

<?php
require_once("autoload.php");
$t = new \theCodingCompany\Mastodon();
//Toot Test
$statusses = $t->PostStatuses("TEST TEST");
var_dump($statusses);

http://localhost/mastodon に アクセス してください。

うまくいったら次のように帰ってきます。だめな時は false が返ります。

こちらでも確認してください。

次は「【画像編】Mastodon(マストドン) PHPで外部から画像付き投稿してみようかとテストをしてみました」をご覧ください。

 
 

あとがき

いきおいで書きましたので間違いがあったらごめんなさいです。
日本語が入っていると「トゥート」に失敗します。
アプリ登録もめんどくさいのでもっと簡単な方法があるかもしれません。
また画像の所はまだだったりするので、これからいろいろAPIがでてくると思います。

 
 

追記

日本語ですが phpファイルを UTF-8N にしたらトゥートできました。

 

参考

documentation / Using-the-API / API.md
https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#statuses