PHP
StreamingAPI
mastodon
qiitadon

Qiitadon の Streaming API を受信する時の注意点

TL;DR

Qiita の マストドン・インスタンス「Qiitadon」は、Pawoo などと Mastodon Streaming API のエンドポイントが以下のように異なっています。

項目 備考
ホスト名 streaming.qiitadon.com qiitadon.comは CDN を通すので、ストリーミング用のドメインが用意されているようです。
ポート 4000 一般的には 443

PHP でストリーミングを受信するサンプル

以下は、簡単な動作を確認する PHP スクリプトです。macOS の場合は何もインストールしなくても動きます。

実行後、数秒待つとストリームが始まります。(Mastodon は SSL 接続が必須なので PHP の OpenSSL が有効である必要があります

sample.php
<?php

// ソケットの準備
$hostname = 'ssl://streaming.qiitadon.com';
$port     = '4000';
$timeout  = 5; //sec
$errno    = '';
$errstr   = '';

// ソケットオープン
$fp = fsockopen($hostname, $port, $errno, $errstr, $timeout);

if (! $fp) {
    die("Error: {$errstr} ({$errno})");
}

// リクエストヘッダの準備
$method     = 'GET';
$endpoint   = '/api/v1/streaming/public';
$host       = 'qiitadon.com'; //streaming.qiitadon.con でない
$user_agent = 'qithub-bot';

$req = [
    "{$method} {$endpoint} HTTP/1.1",
    "Host: {$host}",
    "User-Agent: {$user_agent}",
];
$req = implode($req, "\r\n")."\r\n"."\r\n";

// GETリクエストを送信
fwrite($fp, $req);

// ストリーミングの読み込み
while (! feof($fp)) {
    $read = fgets($fp);
    print_r($read);
    // バッファを出力(画面更新)
    @ob_flush();
    @flush();
}

fclose($fp);

動作確認済み環境

  • macOS HighSierra(OSX 10.13.6)
  • php --version: PHP 7.2.6 (cli)

参考文献