こんにちは、今回はTwitterのREST APIを操作できるTwitterOauthを使用してTwitterの「いいね」を外す方法を書いていきます。
流れとしては、
自身のアカウントのお気に入りした投稿を取得。
取得したお気に入りを外すという感じです。
※下記のソースは、ローカル上でお使いください。ソース上にキーを記述するのでサーバーにあげるときは、書き方を変える必要があります。
いいねを取り消すソース
<?php require_once "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; const CONSUMERKEY=''; const CONSUMERSECRET=''; const ACCESSTOKEN=''; const ACCESSTOKENSERCRET=''; $consumerKey = CONSUMERKEY; $consumerSecret = CONSUMERSECRET; $accessToken = ACCESSTOKEN; $accessTokenSecret = ACCESSTOKENSERCRET; $connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); $processingLength = 1; $statusesArr = $connection->get("favorites/list", ["count" => $processingLength]); for($i = 1; $i <= $processingLength; $i++){ $connection->post('favorites/destroy',['id' => $statusesArr[$i - 1]->id_str]); } ?>
手順
では、手順をみていきます。
まず、TwitterOauthを取り込んで、Twitter Appのキーをそれぞれ入力します。
次に、「$processingLength」にお気に入りした投稿を取得する件数を入力します。
公式ドキュメントを見ていただければ分かりますが、お気に入りした投稿を取得するリミットは、15分で75件です。ちなみに、favorites/destroyは取得するよりもリミット上限が高いので気にしなくて良いです。
GET favorites/list
リミットがあるためお気に入りは一度に全てを消すことはできません。そのため、ローカルで上記ファイルを定期的に実行して地道に消していくか、cronで定期実行させるのがおすすめです。
上記を踏まえて、「$processingLength」に取得する件数を入力すれば完成です。
コマンドで「php ファイル名.php」と実行してあげれば最新のお気に入り順に消えていきます。
全ての「お気に入り」を削除できなかった
残念ながら全ての「お気に入り」を削除できませんでした。
具体的に申しますと、
お気に入りした投稿自体は一切見れなくなりますが、いいねした件数は残ったままです。
少し調べてみましたが、公式がこのような仕様としている記述は見つかりませんでした。ただ、同じ方法で「お気に入り」を消そうとしている方曰く3年以上過去のものは取得できないということらしい。
実際はどうか分かりませんが、プラットフォーム上でも表示されませんし、APIを使って取得してもエラーは起きず空の配列を返されるだけなのでこういう仕様なのかもしれません。
お気に入りを外してもデータは消えることなく、論理削除されているだけだと思うので膨大なテーブル内で過去に遡れば遡るほど負荷がかかってしまうので制限をかけているのではないかと考えられますね。
これ以上「お気に入り」が残らない方法は?
新規でお気に入りをした際にツイートのIDを記録してあげれば、今後お気に入りを外したいときにそのIDを入力してあげれば消えるのでは?と思います。
Webhooksを利用してどこかに記録する方法もありますし、IFTTTというサードパーティサービスを利用して、お気に入りした投稿のIDをGoogleスプレッドに入力する仕様にもできると思います。
以上です。最後まで読んでいただきありがとうございました。
コメント