pythonで釈迦事前登録ツイートしてる垢をブロックする アイマスオタク殺すべし

f:id:runaru_dearly1641:20180402174723p:plain
東京湾に叩き込めー!

はじめに

これはtumblrにかいたものの転載です。tumblrではプログラム載せづらいので

一応断っておきますが、思いついたから作っただけで実際にユーザーブロックはしていません。私はあふがおではないので。

以下本文

アイマス最高
プロデューサー最低

   〜トリプルデイP〜


"キャラクターの誕生日に絵描きの絵をさも自分が描いたのように無断でアップロード" なんてのは序の口で

"アイマスで役を持っている声優が出ているだけでその作品を実質アイマス!など言って騒ぐ" といった、アイマスが全ての前提になっている行動をとって他のコンテンツを軽んじたり

"1クールで終わるアニメと違って、こうやって何年も続くコンテンツで同じ役を持ち続けられるアイマス声優は幸せなんだよ?" とか
"アイマスで役が決まった声優のSNSのアカウントに「アイマスの世界へようこそ!」というメッセージを送りつける" のように、自分の立ち位置がただ金を払うだけの搾取される消費者なのが自覚できず何様なモノの語りをしたり

更にひどいものでは
"ツイキャスでライブのBDを垂れ流す違法行為"や
"イベント会場で鯖を振り回す"、
そんな社会不適合生物のアイマスオタクの中で今最もホットな迷惑行為は「#283プロ事前登録ガシャ」というツイートによるタイムライン汚染

タグミュートをすればタイムラインに現れなくなるためそれで済む話ではあるが、アイマスという名のブランド名がついていればどんなモノでも無条件に受け入れて批判的ユーザーは排除する、カルト宗教アイマス教の信者はブロックするにこしたことはない

そこでTwitterAPIを使って件のタグをストリームして、得たツイートのユーザーをブロックするプログラムをpythonで書いたのでそれを以下に示す(関数やクラスを使ったり、動作毎にファイル分けたり、そんな高度な最適化をする知能はないので雑なプログラムになっています)

# -*- coding: utf-8 -*-
import oauth2 as oauth
import webbrowser as web
from twython import Twython, TwythonStreamer, TwythonError
import sys

#&で文を分割する関数
def parse_qsl(url):
    param = {}
    for i in url.split('&'):
        _p = i.split('=')
        param.update({_p[0]: _p[1]})
    return param

def user_block(twitter, name, screenName, userId):
    try:
        twitter.create_block(screen_name=screenName, user_id=userId)
        print(name,"さんをブロックしました")
    except TwythonError as e:
        print(name,"さんのブロックに失敗しました")
        
#streamerのクラス
class MyStreamer(TwythonStreamer):   
    def on_success(self, data):
        if 'text' in data:
            text = data['text']
            screenName = data['user']['screen_name'] 
            userId     = data['user']['id']          
	    userName   = data['user']['name']                 
            if 'retweeted_status' in data: 
                text = data['retweeted_status']['text']
                screenName = data['retweeted_status']['user']['screen_name']
                userId     = data['retweeted_status']['user']['id']
                userName   = data['retweeted_status']['user']['name']
            user_block(twitter, userName, screenName, userId)

        # Want to disconnect after the first result?
        # self.disconnect()

    def on_error(self, status_code, data):
        print (status_code, data)

request_token_url = 'https://twitter.com/oauth/request_token'
access_token_url = 'https://twitter.com/oauth/access_token'
authenticate_url = 'https://twitter.com/oauth/authenticate'

consumer_key = '自分のAPIキーを入れて'
consumer_secret = '自分のAPIシークレット入れて'

consumer = oauth.Consumer(key=consumer_key, secret=consumer_secret)
client = oauth.Client(consumer)
resp, content = client.request(request_token_url, "GET")
print("■取得したtoken")
print(content)
print("----")

# Tokenを辞書型にセット
strH = content.decode('utf-8')
print(strH)
print("----")
request_token = dict(parse_qsl(strH))

# 認証用ページを開く
url = "https://api.twitter.com/oauth/authorize?oauth_token=" + request_token['oauth_token']
print(url)
#url = "https://api.twitter.com/oauth/authorize?oauth_token=" + d['oauth_token']
web.open(url)

pinNum = input("Please Pin Code: ")

pin = pinNum

otoken = request_token["oauth_token"].encode('utf-8')
otsecret = request_token["oauth_token_secret"].encode('utf-8')

print("■設定するやつ")
print("・oauth token: ")
print(otoken)
print("・oauth token secret: ")
print(otsecret)
print("--")

# Tokenを取得する
token = oauth.Token(otoken, otsecret)
clientOauth = oauth.Client(consumer, token)
nresp, contentOauth = clientOauth.request("https://api.twitter.com/oauth/access_token", "POST", body="oauth_verifier={0}".format(pin))
    
print(contentOauth)
print(nresp)

strX = contentOauth.decode('utf-8')
print("----")
print(strX)
print("----")
oauthToken = dict(parse_qsl(strX))

print(oauthToken)

twitter = Twython(consumer_key, consumer_secret, oauthToken['oauth_token'], oauthToken['oauth_token_secret'])

tweetStream = MyStreamer(consumer_key, consumer_secret, oauthToken['oauth_token'], oauthToken['oauth_token_secret'])
tweetStream.statuses.filter(track="283プロ事前登録ガシャ")

諸注意

Twitter Developerに登録してAPIキーと、APIシークレットを取得してくださいね、ググればすぐにやり方出てきます。電話番号認証したアカウントじゃないと登録できないので注意。

Developerに登録したアカウントだけでプログラム動かすなら、APIキーとか載ってるとこでアクセストークン手に入るのでOauth認証いりません。なのでtwitterオブジェクトの作成までのPIN入力したりの文は全て不要になります、多分。これもググればすぐに出てきます。

twythonとかは入ってなかったらpip installなりでいれてね

参考にしたサイト

pythonでoauth認証

pythonでoauth認証
http://pika-shi.hatenablog.com/entry/20120210/1328866010

urlを分割するparse_qslはここの丸パクリです

Pythonからユーザ認証→ツイートしてみた!Twythonとoauth2ライブラリ

Pythonからユーザ認証→ツイートしてみた!Twythonとoauth2ライブラリ
http://www.lisz-works.com/entry/twython-oauth1-tweet

認証の基本的な流れはここを参考(丸パクリ)しました

あとはStreamの使い方だけ調べれば誰でも作れます、多分

月1アクセスあるかないかのtumblrの記事でしっかりプログラムの解説をするのはアホらしいのでやりませんが、需要があればやります。9割以上参考サイトの切り貼りですけど。