LoginSignup
0
0

More than 3 years have passed since last update.

PHPで過去のツイッター投稿を削除する

Last updated at Posted at 2019-10-21

はじめに

古くから使っているTwitterの過去の投稿を、消すことができるプログラムを書いてみました。 レンタルサーバーでPHPを動かしているので、そこの環境を使って記述しています。

OAuthライブラリの読み込み

PHPのプログラムそのものは、ネットで調べるとすぐに見つけることができました。しかし、そのままでは動きませんでした。TwitterOAuthライブラリが見つからないとのこと。

TwitterOAuth

TwitterOAuth は、Abraham Williams 氏が開発する PHP から Twitter の REST API を操作することができるオープンソース・ライブラリで、Twitter の一通りの操作を行うことができます。

ライブラリはどこに?

お名前ドットコムのレンタルサーバを利用しているので、「OAuthライブラリ」はどこかにあるのではと探しましたが見つけられませんでした。また管理権限がないので、PHP のパッケージ管理ツールなどは操作できません。そこで下記から、いただいてきました。
https://github.com/abraham/twitteroauth
このページの右側にある緑のボタン[cron or download]からDownload ZIPでローカルに落とし、解凍後レンタルサーバーのプログラムと同じ位置にセットアップただコピーするだけ)しました。

// OAuthライブラリの読み込み
require_once "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

セットアップのフォルダー名は twitteroauth にしました。

トークンとキーの準備

Twitter Application Management で取得

私はもともと持っていたので、コピペで完了しましたが、初回Twitterへのアクセスには、4つのキーワードが必要になります。
https://apps.twitter.com/

// Twitter Application Management で取得
$consumerKey = " ~ ~ ~ ";
$consumerSecret = " ~ ~ ~ ";
$accessToken = " ~ ~ ~ ";
$accessTokenSecret = " ~ ~ ~ "; 

最近のこの取得には 手間がかかるようですが、じっくりやれば問題なく4つのキーワードを得られます。それを" ~ ~ ~ "にそれぞれ転記してください。

プログラムの記述

OAuthオブジェクトの生成

//OAuthオブジェクトを生成する
$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); 

削除コマンドの発行

Twitterの投稿一つ一つについている、ステータス情報IDを指定します。(例:919912361440763123) この部分を変数にして回せば一括削除もできます。

// set ID
    $id = 919912361440763123; 
// delete tweet status
    $req = $twitter->post( 'statuses/destroy/'.$id); 

// checking error status
    if($req->errors) {
      $ans = $req->errors[0]->message;
    } else {
      $ans = "削除完了しました";
    };

// result output
    echo $ans.'<br>';

もし、IDが間違っていたり、削除済みを指定したなどの場合には エラーメッセージを表示します。

戸惑ったところ

ツイッター投稿の削除の方法はいくつかあったのですが、私の環境ではうまく動かなく、なやみながら解決しました。 googleなどで検索される方に役立てばと思い比較を付けます。

Twitter API statuses/destroy/:id

私の環境ではエラー Fatal error: Uncaught Error: Call to undefined method になりました。

//API実行データとして記載する一般的な方法
$req = $twitter->OAuthRequest("https://api.twitter.com/1.1/statuses/destroy/919912361440763123.json","POST",array());

これは、下記のようして、すっきりと書け、POSTとして正しく動きました。

$req = $twitter->post( 'statuses/destroy/919912361440763123'); 

終わりに

ステータス情報IDを、検索してまとめて削除するプログラムも考えています。できたら公開します。なお、Twitterの制限なのか 一括処理のときには150件以上にならないように工夫がいるようです。
以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0