修正した。
ブラックリストに加えて、NG wordリストを作成し、
NG wordを含むアカウントがブロックされている場合はブロック解除しないようにした。
それから、ブラックリストへの登録は今までは手作業であったが、
ブロックしているユーザを選択して登録できるようにした。
※ドメイン名は example.comに置き換えてある。
<?php
session_start();
require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
$user = $connection->get("account/verify_credentials");
$blocking_users = array();
echo '<img src="' . $user->profile_image_url . '">' . ' ' . $user->name . ' is blocking following users.<br><br>';
$showdetail = 0;
$black_list = @file('blacklist.txt');
$black_list = array_map('trim', $black_list);
$ngwords = @file('ngwords.txt');
$ngwords = array_map('trim', $ngwords);
echo '<a href="https://example.com/bl/mypage.php?mode=unblock">unblock all</a><br><hr>';
echo '<a href="https://example.com/bl/mypage.php">refresh</a><hr>';
echo '<a href="https://example.com/bl/addbl.php">add blacklist</a><br><br><hr>';
echo '<a href="https://example.com/bl/mypage.php?mode=reblock">reblock users in bl</a><br><hr>';
echo '<a href="https://example.com/bl/edbl.php">edit blacklist</a><hr>';
echo '<a href="https://example.com/bl/mypage.php?mode=logout">logout</a><br>';
$blu_file = 'blocking.txt';
$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {
echo '<hr>';
foreach ($blocks as $val) {
for($i = 0; $i<count($val)-1;$i++)
{
$blocking_user = $val[$i]['screen_name'];
$is_ng = False;
foreach($ngwords as $ng) {
if(stripos($blocking_user, $ng) !== false) {
$is_ng = True;
}
}
if ($is_ng) {
echo '<font size="1">* NG * </font>';
$showdetail = 0;
} elseif (in_array($blocking_user,$black_list)) {
echo '<font size="1">* BL * </font>';
$showdetail = 0;
} else {
$showdetail = 1;
}
echo
'<font size="1">' . $blocking_user . ' ' .$val[$i]['name'] . ' '
. '<font color=blue>' . $blocking_user . '</font><br>' ;
if ($showdetail > 0) {
echo '<blockquote>' . '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
. $val[$i]['description'] . '<br></blockquote>';
$blu_current .= $blocking_user . "\n";
}
$blocking_users_list[] = $blocking_user;
}
}
} else {
echo 'you are blocking nobody.';
}
file_put_contents($blu_file, $blu_current);
if(isset($_GET['mode'])) {
if ($_GET['mode'] == 'unblock') {
foreach($blocking_users_list as $a) {
$is_ng = False;
foreach($ngwords as $ng) {
if(stripos($a, $ng) !== false) {
$is_ng = True;
}
}
if (in_array($a,$black_list)) {
echo $a . " is in blacklist.<br>";
} elseif($is_ng) {
echo $a . " contains ngwords.<br>";
} else {
$result = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/destroy.json','POST'
,array('screen_name'=>$a));
$j = json_decode($result,true);
if (isset($j)) {
echo $j['screen_name']." is unblocked.<br>";
}
}
}
} elseif ($_GET['mode'] == 'reblock') {
foreach($black_list as $a) {
$result = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/create.json','POST'
,array('screen_name'=>$a));
$j = json_decode($result,true);
if (isset($j)) {
echo $j['screen_name']." is blocked.<br>";
}
}
}
header("location:https://example.com/bl/mypage.php");
exit();
}
if(isset($_GET['mode'])) {
if ($_GET['mode'] == 'logout') {
session_destroy();
header("location:https://example.com/bl/login.php");
}
}
?>
ブラックリスト登録
--------------------------
<form name='form1' action = 'addbl_result.php' method='get' >
<?php
$array = file("blocking.txt");
for($i = 0 ; $i < count($array); $i++){
echo '<input name="blocking[]" type="checkbox" value=' . $array[$i] .'>' . $array[$i] . '<br>' ;
}
?>
<input type="submit" vlaue="submit">
</form>
------------------------------
<?php
$bl_file = 'blacklist.txt';
$current = file_get_contents($bl_file);
if(empty($_GET["blocking"])){
echo "何も選んでません";
}else{
$blocking = $_GET["blocking"];
foreach($blocking as $value){
# echo $value . '<br>';
$current .= $value. "\n";
}
}
file_put_contents($bl_file, $current);
header("location:http://example.com/bl/mypage.php");
exit();
?>
このブログを検索
2018/01/27
2013/07/15
twitterのbotが止まる
twitterのbotが止まっていた。
二つ動かしているのだが、二つとも6/11で止まっている。
tweetするスクリプトを手動で動かすと以下のようなエラーが出てツイートしない。
410: Gone
同じアカウントを使っているpythonで作ったスクリプトだとツイートする。
これは、Net::Twitterが新しいAPIに対応していないためだろうと、
Net::Twitter::Liteを最新にするが、変わらない。
検索すると、 Net::Twitter::Lite::WithAPIv1_1 を使うということがわかった。
useとnewのところを直してうまくいった。
二つ動かしているのだが、二つとも6/11で止まっている。
tweetするスクリプトを手動で動かすと以下のようなエラーが出てツイートしない。
410: Gone
同じアカウントを使っているpythonで作ったスクリプトだとツイートする。
これは、Net::Twitterが新しいAPIに対応していないためだろうと、
Net::Twitter::Liteを最新にするが、変わらない。
検索すると、 Net::Twitter::Lite::WithAPIv1_1 を使うということがわかった。
useとnewのところを直してうまくいった。
2013/06/13
tweepyアップデート
twitterでブロックしているユーザの一覧およびその解除をするpythonのスクリプトが動かなくなっていた。
古いAPIのサポートが終わった、みたいなことを見かけたので動かなくなるんじゃないかと予想はしていた。
tweepyを使っているのだが、調べるとtweepyが新しいAPIに対応していたので更新しようとした。
が、すでにインストールされています、となる。2.0が出ているのに・・・
easy_installで更新をするには -U をつけるということを知る。
無事、動くようになった。
その他、不完全ながらphpやperlで作った、webで使えるスクリプトもあるのだがそれらも全部動かなくなっている。
多分同じようにライブラリを更新すればいいのだと思うがメンドクサイからまた今度。
C:\Users\t>python blocking.py
Traceback (most recent call last):
File "blocking.py", line 18, in <module>
results = api.blocks()
File "build\bdist.win32\egg\tweepy\binder.py", line 185, in _call
File "build\bdist.win32\egg\tweepy\binder.py", line 168, in execute
tweepy.error.TweepError: [{u'message': u'The Twitter REST API v1 will soon stop functioning. Please
migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.', u'code': 68}]
古いAPIのサポートが終わった、みたいなことを見かけたので動かなくなるんじゃないかと予想はしていた。
tweepyを使っているのだが、調べるとtweepyが新しいAPIに対応していたので更新しようとした。
C:\Users\t>easy_install tweepy Searching for tweepy Best match: tweepy 1.11 Processing tweepy-1.11-py2.7.egg tweepy 1.11 is already the active version in easy-install.pth Using c:\python27\lib\site-packages\tweepy-1.11-py2.7.egg Processing dependencies for tweepy Finished processing dependencies for tweepy
が、すでにインストールされています、となる。2.0が出ているのに・・・
easy_installで更新をするには -U をつけるということを知る。
C:\Users\t>easy_install -U tweepy Searching for tweepy Reading http://pypi.python.org/simple/tweepy/ Reading http://github.com/tweepy/tweepy Reading http://github.com/joshthecoder/tweepy Best match: tweepy 2.0 Downloading http://pypi.python.org/packages/2.7/t/tweepy/tweepy-2.0-py2.7.egg#md5=193993b0df7c4e28fb a5bb457e401d91 Processing tweepy-2.0-py2.7.egg Moving tweepy-2.0-py2.7.egg to c:\python27\lib\site-packages Removing tweepy 1.11 from easy-install.pth file Adding tweepy 2.0 to easy-install.pth file Installed c:\python27\lib\site-packages\tweepy-2.0-py2.7.egg Processing dependencies for tweepy Finished processing dependencies for tweepy
無事、動くようになった。
その他、不完全ながらphpやperlで作った、webで使えるスクリプトもあるのだがそれらも全部動かなくなっている。
多分同じようにライブラリを更新すればいいのだと思うがメンドクサイからまた今度。
2013/03/26
twitterのblock
twitterの公式のWEBページでは、自分がblockしているユーザの一覧、自分のことをブロックしているユーザの一覧などが参照できない。
私はtwitterを使うためにわざわざアプリをインストールするのは面倒なので、パソコンではブラウザで、iPhoneでは公式アプリでtwitterを使っている。
あまりないのだが、SPAMみたいなアカウントとか、個人的にムカっときたときにブロックをすることがある。
自分が相手をブロックしているかどうかは、「ブロックされました」という通知が出たり「あなたをブロックしているユーザ一覧」などのような機能はないが、確認する方法がある(前に聞いたのだがどうやるかは忘れた)。
「ブロックする」というのは、あきらかなSPAMアカウントはいいとして、それ以外のアカウントに対してだと、なんだか自意識過剰な感じがするのでほとぼりがさめたら解除するようにしている。
そのために、APIを呼び出す簡単なスクリプトを作って実行している。
それを使いながら、「どうして公式サイトや公式アプリではブロックに関する機能があまりないのか」と考えたのだが、もし簡単に一括ブロックとか、ブロックしている・されているユーザ一覧などがわかってしまうと、ブロックが濫用されて気に入らない人のフォローが外れてしまい、「誰とでも気軽につながれる」というtwitterのよさが損なわれ、その他のSNSのように閉鎖的になるのを避けるためではないか。
最近は私はブロックするとすぐにそれを解除する。そうすると、あたかもシステムの不具合でいつの間にかフォローがはずれてしまったかのような状態になる。そういう話はよく聞くし、私も何度か経験した。
だがそれはもしかしたら、私がしているように、相手が私をブロックしてすぐ解除したのかもしれない。
私はtwitterを使うためにわざわざアプリをインストールするのは面倒なので、パソコンではブラウザで、iPhoneでは公式アプリでtwitterを使っている。
あまりないのだが、SPAMみたいなアカウントとか、個人的にムカっときたときにブロックをすることがある。
自分が相手をブロックしているかどうかは、「ブロックされました」という通知が出たり「あなたをブロックしているユーザ一覧」などのような機能はないが、確認する方法がある(前に聞いたのだがどうやるかは忘れた)。
「ブロックする」というのは、あきらかなSPAMアカウントはいいとして、それ以外のアカウントに対してだと、なんだか自意識過剰な感じがするのでほとぼりがさめたら解除するようにしている。
そのために、APIを呼び出す簡単なスクリプトを作って実行している。
それを使いながら、「どうして公式サイトや公式アプリではブロックに関する機能があまりないのか」と考えたのだが、もし簡単に一括ブロックとか、ブロックしている・されているユーザ一覧などがわかってしまうと、ブロックが濫用されて気に入らない人のフォローが外れてしまい、「誰とでも気軽につながれる」というtwitterのよさが損なわれ、その他のSNSのように閉鎖的になるのを避けるためではないか。
最近は私はブロックするとすぐにそれを解除する。そうすると、あたかもシステムの不具合でいつの間にかフォローがはずれてしまったかのような状態になる。そういう話はよく聞くし、私も何度か経験した。
だがそれはもしかしたら、私がしているように、相手が私をブロックしてすぐ解除したのかもしれない。
2013/02/23
twitterのbot
以前twitterのボットを作った。今も動いている。まあ、作ったというほどでもない、簡単なものであるが。
botというと、名言をつぶやくものが多いが、私は非公開にして自分だけfollowし、
覚える必要があることをtweetさせている。
今はTOEICの準備をしているので、模擬試験ででてきた未知の単語やフレーズなどをtweetさせる。
twitterは病気みたいにいつも見ているので、起きた時とか、外出中のちょっとあいた時間などに読むと記憶がリフレッシュされてよいような気がする。
だがこれも、あまり頻度が高すぎると読まなくなってしまう。
これは普通のbotやtweetと同じだ。
botというと、名言をつぶやくものが多いが、私は非公開にして自分だけfollowし、
覚える必要があることをtweetさせている。
今はTOEICの準備をしているので、模擬試験ででてきた未知の単語やフレーズなどをtweetさせる。
twitterは病気みたいにいつも見ているので、起きた時とか、外出中のちょっとあいた時間などに読むと記憶がリフレッシュされてよいような気がする。
だがこれも、あまり頻度が高すぎると読まなくなってしまう。
これは普通のbotやtweetと同じだ。
2013/01/27
Net::Twitter::Liteの更新
Net::Twitter::Liteが新しくなっているようなので更新した。
cpan[1]> install Net::Twitter::Lite CPAN: Storable loaded ok (v2.20) Going to read '/root/.cpan/Metadata' Database was generated on Fri, 25 Jan 2013 14:53:03 GMT CPAN: LWP::UserAgent loaded ok (v6.04) CPAN: Time::HiRes loaded ok (v1.9725) Fetching with LWP: ftp://ftp.riken.jp/lang/CPAN/authors/01mailrc.txt.gz CPAN: YAML loaded ok (v0.70) Going to read '/authors/01mailrc.txt.gz' CPAN: Compress::Zlib loaded ok (v2.058) ............................................................................DONE Fetching with LWP: ftp://ftp.riken.jp/lang/CPAN/modules/02packages.details.txt.gz Going to read '/modules/02packages.details.txt.gz' Database was generated on Sun, 27 Jan 2013 15:17:03 GMT .............. New CPAN.pm version (v1.9800) available. [Currently running version is v1.9402] You might want to try install CPAN reload cpan to both upgrade CPAN.pm and run the new version without leaving the current session. ..............................................................DONE Fetching with LWP: ftp://ftp.riken.jp/lang/CPAN/modules/03modlist.data.gz Going to read '/modules/03modlist.data.gz' ............................................................................DONE Going to write /root/.cpan/Metadata Net::Twitter::Lite is up to date (0.11002).