過去のツイートを友達に見られても平気ですか?
大学生の時や転職前の時のツイートを見られても大丈夫ですか。
過去のつぶやきで黒歴史がばれたりしませんか。
なんだか心配になってきた人は、ツイートを定期的に削除できるようにしておきましょう。
APIとかサーバーとかphpとかさっぱりピーマンというあなたでも、
手順に従えば簡単に設定できます!
わかりにくいところがあればコメントまたはお問い合わせより、気軽にお尋ねください。
それでは、やっていきましょう。
目次
Twitter APIを使えるようにする。
Twitter Appsにログインする。
こちらから。
Sign inをクリックしてログイン。
新しいアプリケーションを作成する。
「Create New App」をクリックする。
作成するアプリケーションの情報を記入する。
記入する項目 | 内容 |
Name | アプリケーションの名前。重複禁止。 |
Description | アプリケーションの概要。 |
Website | アプリケーションを動かす、webサイトのトップページ |
Developer Agreement | 利用規約。「Yes,I agree(同意)」にチェック。 |
※Callback URLについては、未記入で大丈夫です。
APIキーを確認します。
アプリケーションが作成されました。
「Key and Access Tokens」をクリックします。
API KeyとAPI Secretは後ほど使用します。
アクセストークンを取得する。
「Create my access token」をクリックして、アクセストークンを取得します。
※Access TokenとAccess Token Secretは後ほど使用します。
Access Levelについては初期設定で、「Read and Write」になっていると思います。
ツイートを削除するPHPファイルを作成する。
コードにAPIキー等を入力する。
コードはこちらのサイトを参考にさせていただきました。
https://syncer.jp/Web/API/Twitter/REST_API/GET/statuses/user_timeline/
https://syncer.jp/Web/API/Twitter/REST_API/POST/statuses/destroy/id/
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | <?php // 設定 $api_key = 'XXXXXXXXXXXXXXXX' ; // APIキー $api_secret = 'XXXXXXXXXXXXXXXXX' ; // APIシークレット $access_token = 'XXXXXXXXXXXXXX' ; // アクセストークン $access_token_secret = 'XXXXXXXXXXXXXXXX' ; // アクセストークンシークレット $screen_name = '@XXXXXXXXX'; // スクリーンネーム $get_count = 100; // 取得件数(最大100件まで) $require_number = 10; //ループ回数 for ($i = 0; $i < $require_number; $i++) { // GET処理開始 // 設定 $request_url_get = 'https://api.twitter.com/1.1/statuses/user_timeline.json' ; // エンドポイント $request_method_get = 'GET' ; // パラメータA (オプション) $params_a = array( 'screen_name' => $screen_name , 'count' => $get_count , //'since_id' => 'XXXXXXXXXXXXXX' , // 最古のツイートID //'max_id' => 'XXXXXXXXXXXXXX' , // 最新のツイートID //'trim_user' => 'false' , // ユーザーオブジェクトの省略 //'contributor_details' => 'true' , // ライター情報にユーザーオブジェクトを含める //'exclude_replies' => 'false' , // リプライを除外する //'include_rts' => 'false' , // リツイートを含める ) ; // キーを作成する (URLエンコードする) $signature_key = rawurlencode( $api_secret ) . '&' . rawurlencode( $access_token_secret ) ; // パラメータB (署名の材料用) $params_b = array( 'oauth_token' => $access_token , 'oauth_consumer_key' => $api_key , 'oauth_signature_method' => 'HMAC-SHA1' , 'oauth_timestamp' => time() , 'oauth_nonce' => microtime() , 'oauth_version' => '1.0' , ) ; // パラメータAとパラメータBを合成してパラメータCを作る $params_c = array_merge( $params_a , $params_b ) ; // 連想配列をアルファベット順に並び替える ksort( $params_c ) ; // パラメータの連想配列を[キー=値&キー=値...]の文字列に変換する $request_params = http_build_query( $params_c , '' , '&' ) ; // 一部の文字列をフォロー $request_params = str_replace( array( '+' , '%7E' ) , array( '%20' , '~' ) , $request_params ) ; // 変換した文字列をURLエンコードする $request_params = rawurlencode( $request_params ) ; // リクエストメソッドをURLエンコードする // ここでは、URL末尾の[?]以下は付けないこと $encoded_request_method_get = rawurlencode( $request_method_get ) ; // リクエストURLをURLエンコードする $encoded_request_url = rawurlencode( $request_url_get ) ; // リクエストメソッド、リクエストURL、パラメータを[&]で繋ぐ $signature_data = $encoded_request_method_get . '&' . $encoded_request_url . '&' . $request_params ; // キー[$signature_key]とデータ[$signature_data]を利用して、HMAC-SHA1方式のハッシュ値に変換する $hash = hash_hmac( 'sha1' , $signature_data , $signature_key , TRUE ) ; // base64エンコードして、署名[$signature]が完成する $signature = base64_encode( $hash ) ; // パラメータの連想配列、[$params]に、作成した署名を加える $params_c['oauth_signature'] = $signature ; // パラメータの連想配列を[キー=値,キー=値,...]の文字列に変換する $header_params = http_build_query( $params_c , '' , ',' ) ; // リクエスト用のコンテキスト $context = array( 'http' => array( 'method' => $request_method_get , // リクエストメソッド 'header' => array( // ヘッダー 'Authorization: OAuth ' . $header_params , ) , ) , ) ; // パラメータがある場合、URLの末尾に追加 if( $params_a ) { $request_url_get .= '?' . http_build_query( $params_a ) ; } // cURLを使ってリクエスト $curl = curl_init() ; curl_setopt( $curl , CURLOPT_URL , $request_url_get ) ; curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $context['http']['method'] ) ; // メソッド curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ; // 証明書の検証を行わない curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ; // curl_execの結果を文字列で返す curl_setopt( $curl , CURLOPT_HTTPHEADER , $context['http']['header'] ) ; // ヘッダー curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ; // タイムアウトの秒数 $res1 = curl_exec( $curl ) ; $res2 = curl_getinfo( $curl ) ; curl_close( $curl ) ; // 取得したデータ $json = substr( $res1, $res2['header_size'] ) ; // 取得したデータ(JSONなど) $header = substr( $res1, 0, $res2['header_size'] ) ; // レスポンスヘッダー (検証に利用したい場合にどうぞ) // JSONをオブジェクトに変換 $obj = json_decode( $json, true ) ; //GET処理ここまで //POST処理開始 $request_method = 'POST' ; $count_num = 0; while ($obj[$count_num]["id"] != "") { $request_number = $obj[$count_num]["id"]; $request_url = 'https://api.twitter.com/1.1/statuses/destroy/' . $request_number . '.json' ; // エンドポイント // パラメータA (オプション) $params_a = array( // 'trim_user' => 'false' , // ユーザーオブジェクトの省略 ) ; // キーを作成する (URLエンコードする) $signature_key = rawurlencode( $api_secret ) . '&' . rawurlencode( $access_token_secret ) ; // パラメータB (署名の材料用) $params_b = array( 'oauth_token' => $access_token , 'oauth_consumer_key' => $api_key , 'oauth_signature_method' => 'HMAC-SHA1' , 'oauth_timestamp' => time() , 'oauth_nonce' => microtime() , 'oauth_version' => '1.0' , ) ; // パラメータAとパラメータBを合成してパラメータCを作る $params_c = array_merge( $params_a , $params_b ) ; // 連想配列をアルファベット順に並び替える ksort( $params_c ) ; // パラメータの連想配列を[キー=値&キー=値...]の文字列に変換する $request_params = http_build_query( $params_c , '' , '&' ) ; // 一部の文字列をフォロー $request_params = str_replace( array( '+' , '%7E' ) , array( '%20' , '~' ) , $request_params ) ; // 変換した文字列をURLエンコードする $request_params = rawurlencode( $request_params ) ; // リクエストメソッドをURLエンコードする // ここでは、URL末尾の[?]以下は付けないこと $encoded_request_method = rawurlencode( $request_method ) ; // リクエストURLをURLエンコードする $encoded_request_url = rawurlencode( $request_url ) ; // リクエストメソッド、リクエストURL、パラメータを[&]で繋ぐ $signature_data = $encoded_request_method . '&' . $encoded_request_url . '&' . $request_params ; // キー[$signature_key]とデータ[$signature_data]を利用して、HMAC-SHA1方式のハッシュ値に変換する $hash = hash_hmac( 'sha1' , $signature_data , $signature_key , TRUE ) ; // base64エンコードして、署名[$signature]が完成する $signature = base64_encode( $hash ) ; // パラメータの連想配列、[$params]に、作成した署名を加える $params_c['oauth_signature'] = $signature ; // パラメータの連想配列を[キー=値,キー=値,...]の文字列に変換する $header_params = http_build_query( $params_c , '' , ',' ) ; // リクエスト用のコンテキスト $context = array( 'http' => array( 'method' => $request_method , // リクエストメソッド 'header' => array( // ヘッダー 'Authorization: OAuth ' . $header_params , ) , ) , ) ; // オプションがある場合、コンテキストにPOSTフィールドを作成する if( $params_a ) { $context['http']['content'] = http_build_query( $params_a ) ; } // cURLを使ってリクエスト $curl = curl_init() ; curl_setopt( $curl , CURLOPT_URL , $request_url ) ; curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $context['http']['method'] ) ; // メソッド curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ; // 証明書の検証を行わない curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ; // curl_execの結果を文字列で返す curl_setopt( $curl , CURLOPT_HTTPHEADER , $context['http']['header'] ) ; // ヘッダー if( isset( $context['http']['content'] ) && !empty( $context['http']['content'] ) ) { curl_setopt( $curl , CURLOPT_POSTFIELDS , $context['http']['content'] ) ; // リクエストボディ } curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ; // タイムアウトの秒数 $res1 = curl_exec( $curl ) ; $res2 = curl_getinfo( $curl ) ; curl_close( $curl ) ; // 取得したデータ $json = substr( $res1, $res2['header_size'] ) ; // 取得したデータ(JSONなど) $header = substr( $res1, 0, $res2['header_size'] ) ; // レスポンスヘッダー (検証に利用したい場合にどうぞ) $count_num++; } } ?> |
コード内の以下の部分を先ほど取得した値に書き換えてください。
$api_key = ‘XXXXXXXXXXXXXXXX’ ; // APIキー
$api_secret = ‘XXXXXXXXXXXXXXXXX’ ; // APIシークレット
$access_token = ‘XXXXXXXXXXXXXX’ ; // アクセストークン
$access_token_secret = ‘XXXXXXXXXXXXXXXX’ ; // アクセストークンシークレット
$screen_name = ‘@XXXXXXXXX’; // スクリーンネーム
については、ツイッターのユーザー名@〜に書き換えてください。
削除ツイート数を指定する。
$get_count = 100; // 取得件数(最大100件まで)
$require_number = 10; //ループ回数
希望の時間に何ツイート削除したいかによって値を変えてください。
1日に1回ツイートを削除するのであれば、1日の平均ツイート数より少し多いくらいを設定しておくとよいかと思います。
1日に100ツイートするのであれば、取得件数を100のままで、ループ回数を1に変更してください。
作成したPHPファイルをサーバーにアップロード
PHP, cronが使用できるサーバーを既にお持ちの方でロリポップ以外のサーバーを利用している方は、
「○○(サーバー名) cron設定」で検索してみてください。
ここでは、ロリポップレンタルサーバーでの設定について説明します。
サーバーを持っていない方
サーバーを用意しましょう。
ここでは僕も使っている「ロリポップレンタルサーバー」を使っていきます。
サーバーの中では有名なものなので、わからないところがあっても調べればでてくるので安心です。
一番安いプランの月額100円のプランで十分だと思います。
10日間はお試し期間で無料なので、「ツイートが自動削除されていく生活」を10日間味わってから考えてみてはいかがでしょうか。
ロリポップレンタルサーバーの申し込み方法
上記リンクに飛ぶとこのような画面がでてくるかと思います。
一番左の「エコノミープラン」を選択してください。
他のことにもサーバーを使う予定があれば、他のプランを選んでも大丈夫です。
ここでは一番安いプランを使用していきます。
情報を入力していきます。
ツイートの自動削除のみでしか使わないのであれば、「アカウント」と「ロリポップ!のドメイン」
は何でも大丈夫です。既に利用されていないものにしましょう。
入力が終われば、「お申し込み内容入力」をクリックします。
次にこのような画面が表示されるので、入力していきます。
入力が終わったら「申し込み内容を確認」をクリックします。
内容を確認後、「利用規約」に同意を選択し、申し込みを完了させてください。
無事完了したら、「管理画面にログインする」をクリックします。
これでサーバーの利用登録は完了です。10日間は無料で利用が可能です。
継続して利用したい場合は、管理画面から、「ご契約手続き」へ進んでください。
契約手続きをしなければ自動的に削除されます。
次に、管理画面からサーバーに「PHPファイルをアップロード」する方法を説明していきます。
PHPファイルのアップロード
先ほどの手順の続き、またはトップページからログインするとこような管理画面がでてくるかと思います。
サイドバーの「WEBツール」→「ロリポップ!FTP」をクリックします。
このようなページが表示されます。
アップロードのアイコンをクリックし、phpファイルを選択しアップロードしたら完了です。
PHPファイルの作成方法がわからない方でも大丈夫
ロリポップ!FTPから直接ファイルを作成することもできます。
「新規ファイルを作成」のアイコンをクリックします。
ファイルの作成画面がでてくるので、入力していきます。
ファイル名は、「○○(半角英数字).php」にしてください。
文字コードは、初めからutf-8になっていると思うのでそのままで大丈夫です。
そして、先ほど紹介したphpのコードをここにコピペします。
APIキー等は自分のものに隠岐変えてください。
完了したら、「保存する」をクリックしてください。
保存後、上記画像のURLにアクセスすると、プログラムが起動し、ツイートが削除されます。
取得件数を100、ループを1にしていれば、100ツイート分削除されます。
.htaccessファイルを作成してアクセスを制限する。
このままにしておくと、誰かがツイート削除のURLにアクセスした場合、ツイートが削除されることになります。
普通に考えて、自分以外がこのURLを知ることはほとんど有り得ないのですが、念には念をということでアクセスを制限します。
先ほどと同じ方法でファイルを作成していきます。
場所 | 操作 |
ファイル名 | 「.htaccess」と記入する。 |
文字コード | 「ASCII」を選択 |
コード記入欄 | <Files “○○○○.php”> ○○○○には作成したphpファイルの名称を記入。 |
上記の作業を終えたら、「保存する」を押してください。
先ほどアップロードしたファイルのURLにアクセスし、上記の画面が表示されれば完了です。
これで間違ってアクセスすることや、他の人がアクセスすることでツイートが削除されることがなくなりました。
cron設定
次に、先ほどアップロードしたプログラムが、時間指定で起動するように設定していきます。
cronとは、UNIX系システムの常駐プログラム(デーモン)の一種で、ユーザの設定したスケジュールに基づいて指定したコマンドやシェルスクリプトなどを自動実行してくれるプログラム。
実行スケジュールは毎時、毎日、毎週、毎月をはじめ細かく指定でき、「crontab」というファイルに記述・保存しておく。crond(cron daemon)というプロセスがcrontabの内容に従って、決められた日時にコマンドなどを実行してくれる。
このcronの設定をロリポップ!レンタルサーバーなら簡単に行うことができます。
ロリポップ!レンタルサーバーの月額100円のエコノミープランであれば、
1つのみcronを登録することができます。
早速見ていきましょう。
ユーザー専用ページから「WEBツール」→「cron設定」に進みます。
このような画面がでてくるので情報を入力していきます。
入力箇所 | 内容 |
cron設定名 | 「ツイート定期削除」など わかりやすいものならなんでも大丈夫です。 |
日付(月) | 特定の月に定期削除するなら「○月」を選択。 それ以外であれば、「毎月」を選択。 |
日付(日) | 特定の日に定期削除するなら「○日」を選択。 それ以外であれば、「毎日」を選択。 |
曜日 | 特定の曜日に定期削除するなら「○曜日」を選択。 それ以外であれば、「毎日」を選択。 |
時間(時) | 特定の時間に定期削除するなら「○時」を選択。 それ以外であれば、「毎時」を選択。 |
時間(分) | 特定の分に削除するなら「○分」を選択。 それ以外であれば、「○分毎」を選択。 |
実行ファイルパス | 先ほどアップロードした「○○.php」を入力。 |
少しわかりにくいので例をいくつか挙げていきます。
例)毎朝5時に定期削除したい場合(僕はこの設定にしています。)
「毎月、毎日、毎日、5時、0分」と順番にいれます。
例)毎週月曜日の0時に定期削除したい場合。
「毎月、毎日、月曜日、0時、0分」と順番にいれます。
例)1時間毎に削除したい場合。
「毎月、毎日、毎日、毎時、0分」と順番にいれます。
以上で設定は終了です。
設定して確認してみてください。
一度設定したcronは編集できないので、一度削除してから再設定してください。
定期削除設定が済んだらツイート全削除。
ツイート全削除については、(疲れたので)説明は割愛します。
先ほど作成したphpファイルを何回か起動させれば、ツイートを削除することもできるのですが、
ツイート数が多い場合はちょっと面倒くさいかもしれないので、便利なツールを紹介します。
http://kurorekishi.me/cleaner/getstarted
「黒歴史クリーナー」というツールで、ツイートを全削除することができます。
使い方や注意点、噂されてる危険性などについてはこちらのブログに詳しく紹介されていました。
http://chuumoku-news.com/kurorekishi-cleaner-2536
最後に
ツイート定期削除で安心なツイッターライフを!
僕も毎朝5時に定期削除設定することで、安心してくだらないことをつぶやけるようになりました。
滑っても、5時に消えると思えば大丈夫だし、過去ツイートを遡って鳥肌が立つ心配もありませんよ〜。
それでは!
大変参考になりましてうまいこと削除することができました
ちょっとこだわってみたいのですが,例えばツイートしてから3日以上経ったツイートのみ削除するにはどうしたらいいでしょうか?
GEDさま
はじめまして。参考になったようで良かったです!
「ツイートしてから3日以上経ったツイートのみ削除する」方法について、素人ながら回答いたします。
主な考えかたは、こちらの記事の要素を利用すれば可能かと思います。
【特定のハッシュタグを除いてツイートを自動削除する方法。】
https://ytszk.info/blog/%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%B0%E3%82%92%E9%99%A4%E3%81%84%E3%81%A6%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3%82%92%E8%87%AA%E5%8B%95%E5%89%8A%E9%99%A4/
こちらの方法では、TwitterAPIの中でも「GET search/tweets – ツイートを検索する(https://syncer.jp/Web/API/Twitter/REST_API/GET/search/tweets/)」
を利用して該当のツイートのidを抽出してから、削除を行っています。
GET search/tweetsの中でも、「”until” => “2017-01-17″」(YYYY-MM-DDの形式)で検索することで、指定日時以前のツイートを検索することができます。
これができると、指定日時以前のツイートを全削除することが可能です。
どのように「3日前」を設定するのかという点ですが、こちらの記事が参考になりそうです。
【PHPでの日付取得方法! 詳細まとめました】
https://eng-entrance.com/php-date
cron設定で毎日phpを実行するようにし、
php実行時に、「その日の日付」を取得し、
「その日付-3日」という風に出力することで、
毎日、その日から「3日前以前」のツイートを削除することができるようになるのではないでしょうか?
すなわち、「3日間はツイートが保持」され、それ以上たつと削除されます。
僕も実際に試していないので、想像の範囲内ですが、、、
あくまで自己責任でお願いしますね!
もしわからなければ、僕が実際に試してみて、記事にしようと思います!
よろしくお願いします。
詳しい回答ありがとうございます!
さっそく試してみます
そして原因がわかった気がします
私のアカウント鍵垢なのでどうやらsearchできないようです…
何かいい方法があると思うのですが、今はぱっと思いつきません、、、
解決策がわかれば、ご共有いただきたいです!
あれから自分なりに調べてみたのですが私の知識と実力では難しそうです
策も無いので手動でせこせこ消してます…