
記事を書く、もしくは「いいね」するとtoken(暗号資産)が貰えるソーシャルメディアのALISの人気ダグを自動でTweetするbotを作ったので作り方を紹介します。
Twitterの開発者アカウントを作成
開発者アカウントを持ってない方は、まず下のリンクからアカウントを作りましょう。
https://developer.twitter.com/
これを何に使いますか?の説明文を英語で説明するのがややハードル高めですが、Google先生のおかげでなんとかクリアー。意味不明な文になっても後日、日本語でお問い合わせが来るので心配なしです。早ければ24時間ほどでメールが返って来て申請が完了します。
集計コード作成
ALISの公式APIを使用します。
今回はその中の「最新記事一覧情報を取得」するAPIの
https://alis.to/api/articles/recent
を使用します。
コードの流れは、
・APIで新着記事を読み出し:11行目~
・記事の作成時間を取得:26行目~
・作成時間が条件に合うか確認:30行目~
・タグ取得: 33行目~
・取得したタグを名前順に並べ替え: 56行目~
・タグをカウント: 61行目~
・カウントの多い順にタグを並べ替え: 72行目~
・Tweetする: 78行目~
サンプルコード
<?php //twitter認証 require_once("TwistOAuth.phar"); $consumerKey = "xxxxx"; $consumerSecret = "xxxxx"; $accessToken = "xxxxx"; $accessTokenSecret = "xxxxx"; //新着記事100件読み出し $url = "https://alis.to/api/articles/recent?limit=100"; $context = stream_context_create(["http" => ["ignore_errors" => true,"timeout" => 3]]); $file = file_get_contents($url, false, $context); //いろいろデーターをセット $start = 0; $kanma = ","; $kigo = "\""; $time0 = strtotime("-24 hour"); // 1000記事分繰り返し処理 for($j = 2; $j < 10; $j++){ for($i = 0; $i < 100; $i++){ //記事作成時間取得 $start = strpos($file,"created_at",$start)+13; $timestamp = substr($file, $start, 10); if($timestamp >= $time0){ $start1 = strpos($file,"tags",$start)+8; //タグ取得 for($a = 0; $a < 5; $a++){ $start1 = strpos($file, $kigo,$start1); $start2 = $start1 +1; $end1 = strpos($file, $kigo,$start2)+1; $tag = substr($file, $start1, $end1-$start1); if($tag == "\"status\""){ break; } $tags[] = json_decode($tag); $start1 = $end1 +1; } } } // 次の100件読み出し $url = "https://alis.to/api/articles/recent?limit=100&page=".$j; $file = file_get_contents($url, false, $context); $start= 0; } //名前順に並べ替え $b = count($tags)-1; sort($tags, SORT_NATURAL); $count = 0; //タグをカウント for($c = 0; $c < $b; $c++){ $count++; if($tags[$c] == $tags[$c+1]){ continue; } $tagg[] = [$count,$tags[$c]]; $count = 0; } //多い順に並べ替え rsort($tagg); //リンク先url作成 $link = "https://alis.to/tag/".urlencode($tagg[0][1]); //出力文作成 $tweet = "<直近24時間 ALIS人気タグTOP3>"."\n". $tagg[0][1].":".$tagg[0][0]."件"."\n". $tagg[1][1].":".$tagg[1][0]."件"."\n". $tagg[2][1].":".$tagg[2][0]."件"."\n". $link; //出力 $twitter = new TwistOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); $result = $twitter->post("statuses/update", ["status" => $tweet]);
サーバーにアップロード
サーバーにアップロードしなくても、上記のサンプルコードでTweet可能ですが決まった時間に自動でTweetしたい場合は必要です(他にもやり方はあると思いますが)アップロードしてしまえばCRONを設定するだけなので1番簡単なやり方ではないかと思います。
ただ、安いレンタルサーバーでは直接phpファイルなどのややこしいものはアップロードさせてくれません。FTP(File Zilla など)を利用しましょう。
まとめ
Tweetする、APIからデーターを取得して特定も文字を抽出する、繰り返す(for文)、ソートする、などの簡単なコードの組み合わせなのでこれさえ理解出来ればほぼすべてのAPIを使いこなせると思います。
ここに来るまで約2ヶ月、子供を寝かしつけてから自分が寝るまで時間だけでも会得出来るので諦めないで下さいね。コツコツ勉強しましょう( ͡° ͜ʖ ͡°)🍄