例えば、「チャンネル登録よろしくね」を100コメントごとに1回流すとか、
注意事項を10分ごと流すとか、特定のワードに対して自動で返すとか。
botってやつです。
今回は10分ごとにA⇒B⇒C⇒A…のコメントをローテーションするものを作ります。
APIの使い方は公式のここ
と検索してできた外国の動画でやり方を察しました。情報が少なくて苦労しました。
荒らしとかの関係なのか全然でてこない。謎です。
公式の「Try it now.」の以下のフォーマットが投げられればいいらしいです。
スパチャもたぶんtypeを変えればできそう。試さないけど。
今までのread操作とはやることが多いです。
①OAuth2.0での認証が必要なので、以前の記事を参照してトークンを作成。
ただし、書き込みなので
「https://www.googleapis.com/auth/youtube.readonly」
ではなく
「https://www.googleapis.com/auth/youtube」
でトークンを作る必要があります。
「get_token.php」の12行目を変更し、実行すればOK。
これは URLを送信するときにヘッダーに含まれるようにします。
②チャットのテキストのために配列を作ってそれをjson_encode関数で
変換して付与しています。
これを URLを送信するときにRequest bodyに含まれるようにします。
コードは以下のようになります。
コードの前半は、以前の記事「登録チャンネルリストの出力」 の前半と同じです。
①にはAPIキー、②には今回は生放送中の動画のidを入れます。
https://www.youtube.com/watch?v=xxxxxxxxxxx
のxxxxxxxxxxxの文字列のことです。
③ここにコメントを入力です。絵文字はちょっとわかんないです。
読み出ししたのをコピペすればいけるか?
なお、トークンは読み出して作成するので今回はコード上に記述しません。
また、一度作成したトークンの更新処理を行っていないので1時間で無効になります。
50分ぐらいで更新とか工夫してください。。。
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | <?php //////////////////////////////////////////////////////////////////////////////////////////////// define('TOKEN_URL', 'https: //accounts.google.com/o/oauth2/token'); //ファイルからclient_idとclient_secretを読み込む $fp = @ fopen ("client_data.txt","r") or die ("File Open Error!\n"); $client_id = rtrim( fgets ( $fp )); $client_secret = rtrim( fgets ( $fp )); fclose( $fp ); //ファイルから更新トークンを呼び出す $fp = @ fopen ("ReToken.txt","r") or die ("File Open Error!\n"); $refresh_token =rtrim( fgets ( $fp )); fclose( $fp ); //リフレッシュトークンからアクセストークンを取得する $params2 = array ( 'client_id' => $client_id , 'client_secret' => $client_secret , 'refresh_token' => $refresh_token , 'grant_type' => 'refresh_token', ); $headers = array ( 'Content-Type: application/x-www-form-urlencoded', ); // POST送信 $options2 = array ('http' => array ( 'method' => 'POST', 'content' => http_build_query( $params2 ), 'header' => implode("\r\n", $headers ), )); // アクセストークンの取得 $res = file_get_contents (TOKEN_URL, false, stream_context_create( $options2 )); // レスポンス取得 $token = json_decode( $res , true); if (isset( $token ['error'])){ echo 'エラー発生'; exit ; } $access_token = $token ['access_token']; //////////////////////////////////////////////////////////////////////////////////////////////////ここからチャットへの書き込み $key = "①"; $videoId = "②"; $comentList = array ( "A", //③ "B", "C", ); $cnt = 0; //ChatIdの取得 $search_api ="https: //www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id=" . $videoId ."&key=" . $key; $search_contents = file_get_contents ( $search_api ); $search_json = json_decode( $search_contents ,true); $ChatId = $search_json ["items"][0]["liveStreamingDetails"]["activeLiveChatId"]; while (1) { $post_api ="https: //www.googleapis.com/youtube/v3/liveChat/messages?part=snippet"; $params = array ( 'snippet' => array ( 'type' => 'textMessageEvent', 'liveChatId'=> $ChatId , 'textMessageDetails'=> array ( 'messageText'=> $comentList [ $cnt ], ) ) ); $json_param = json_encode( $params ); $options = array ('http' => array ( 'method' => 'POST', 'header' =>implode("\r\n", array ( 'Authorization: Bearer '. $access_token , 'Accept: application/json', 'Content-type: application/json;', )), 'content' => $json_param , )); $res = file_get_contents ( $post_api , null, stream_context_create( $options )); //書き込み // $token = json_decode($res, true); // print_r($token); usleep(600*1000*1000); //10min待ち $cnt = ( $cnt +1) % ( count ( $comentList )); //次のコメントへ } ?> |
注釈として
69行目から78行目がRequest body部分です。ここにチャットIDやコメント文が入ります。
84行目 たぶんBearerの後にスペースが必要です。
92行目 ここでチャットの書き込みを行います。投げた結果が返ってきます。たぶん書き込みをすぐ消すときに使ったりするのかもしれない。
エラー401が返った場合は認証されてない⇒アクセストークンをうまく設定できていません。
エラー400の場合は認証ができているがRequest bodyのフォーマットが正しくなかったり、
チャットの連続投稿ではじかれたりしているのだと思われます。
95行目 ここで10分という時間を作ってます。
96行目 ここコメントのローテーション