Help us understand the problem. What is going on with this article?

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

はじめに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした