このブログを検索

ラベル twitter の投稿を表示しています。 すべての投稿を表示
ラベル twitter の投稿を表示しています。 すべての投稿を表示

2018/01/27

twitterでブロックしているユーザの表示、ブロック解除

修正した。

ブラックリストに加えて、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();
?>

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のところを直してうまくいった。


2013/06/13

tweepyアップデート

twitterでブロックしているユーザの一覧およびその解除をするpythonのスクリプトが動かなくなっていた。

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のように閉鎖的になるのを避けるためではないか。

最近は私はブロックするとすぐにそれを解除する。そうすると、あたかもシステムの不具合でいつの間にかフォローがはずれてしまったかのような状態になる。そういう話はよく聞くし、私も何度か経験した。

だがそれはもしかしたら、私がしているように、相手が私をブロックしてすぐ解除したのかもしれない。


2013/02/23

twitterのbot

以前twitterのボットを作った。今も動いている。まあ、作ったというほどでもない、簡単なものであるが。

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).