#はじめに
古くから使っている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件以上にならないように工夫がいるようです。
以上