先日curlを使ってマストドンにトゥートする方法をご紹介しました。
本日はそれを応用して、自動的に任意のインスタンスに対してトゥートするbotを作ってみようと思います。
全体の流れ
1.投稿する情報をどこかから拾ってきます。今回はニュースサイトの最新トピックを持ってくる感じにします
2.持ってきたニュースのタイトルとURLを自動トゥートします
3.定期実行するためにcrontabに時間の設定をします
投稿するための情報を持ってくる
投稿するデータを既にDBなどで自分で持っている方はそちらを使っていただいて結構です。
私の場合、地元のローカルインスタンスにニュースをトゥートするbotを作る為、某サイトからスクレイピングすることにします。
*スクレイピングは対象のサーバに負荷をかける行為ですので、自己責任かつ常識の範囲で実施してください。
phpQuery-onefile.phpが必要なのでwgetなどで適宜配置しておく
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<?php require_once("lib/phpQuery-onefile.php"); header("Content-Type: application/octet-stream"); // 処理実行 run(); // 投稿するテキスト $postText = ""; function run() { // データ取得対象のURL $urlBase = "http://データソースのURL"; // 再実行数 $retryCount = 0; // データ取得 $HTMLData = file_get_contents($urlBase, false); // データが取得できなかった場合は1回だけretry if ($HTMLData == null) { // データの取得に失敗したら再接続する if($retryCount == 0) { $retryCount++; sleep(30); run(); } else { return; } } // 必要に応じて先頭のxml宣言を削除する // 不要な場合はこの処理を抜かす $convertedHtml = preg_replace("<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>", '', $HTMLData); // データ取得 // HTMLをオブジェクトとして扱う $phpQueryObj = phpQuery::newDocument($convertedHtml); // data $title = ""; $url = ""; // ページの内容に合わせてスクレイピング // 最新のデータを取得してbreak foreach ($phpQueryObj["div .dataList li"] as $data){ $title = substr(pq($data)->find("a")->text(), 16); $url = pq($data)->find('a')->attr('href'); break; } $postText = $title . " " . "#ハッシュタグなど" . " " . $url; } |
先ほど取得したテキストをマストドンインスタンスへ投げる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// post post($postText); function post($str) { $ch = curl_init(); $mastodonURL = "https://マストドンインスタンスURL"; $options = array( 'mastodon_host' => $mastodonURL, 'status' => $str ); curl_setopt($ch, CURLOPT_URL, $mastodonURL. '/api/v1/statuses'); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer 取得したアクセストークン")); curl_setopt($ch, CURLOPT_POSTFIELDS, $options); $response = curl_exec($ch); curl_close($ch); } |
定時実行の設定を行う
毎日8:15と19:15にスクリプトを実行
1 |
15 8,19 * * * cd /home/yourusername/postbot;php postbot.php |
1件のコメント