りんごの備忘録

へなちょこポカ大生のへなちょこブログ

gbf-raiderの劣化版をpythonで作ってみた話

グラブルにあらゆる時間を奪われ,グラブルが生活の中心になっている鈴瑚です.グラブルを始めるならこちら→
www.andapp.jp
グラブルにはマルチシステムがありtwitterを介して他の人の救援に入れるようになっています.そうなれば当然twitterAPIを用いた救援に入るのを援助するアプリケーションも存在します.自分も今の今までそのアプリケーションに頼っていたのですが,サイトが閉鎖されることになりこのままでは生活に支障が生じそうだったので自分で作ることにしました.Mac専用

準備

まずpythonでtwitterAPIを使えるようにTwythonを導入します.やり方などはググってくださればすぐに出てくると思います.
TwitterAPIを使うためにキーを取得します.これも検索すれば簡単です.

コード
#!/usr/bin/env python
from twython import Twython, TwythonError
from twython import TwythonStreamer
import sys
from multiprocessing import Pool
import time
import subprocess
global CONSUMER_KEY
global CONSUMER_SECRET
global ACCESS_KEY
global ACCESS_SECRET

#twitter_api_key
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_KEY = ''
ACCESS_SECRET = ''

argvs = sys.argv
del argvs[0]
argc = len(argvs)

#ヘルプオブション,適宜足してください
if argvs[0] == '-h':
	print ("1:Lv50 ティアマト・マグナ\n\
			2:Lv70 コロッサス・マグナ\n\
			3:Lv60 リヴァイアサン・マグナ\n\
			4:Lv60 ユグドラシル・マグナ\n\
			5:Lv75 シュヴァリエ・マグナ\n\
			6:Lv75 セレスト・マグナ\n\
			")
	exit()
#敵の名前を正確に打ち込む,英語名を調べるのがめんどくさければ空欄で
enemy_info_dict = {\
			"1":["Lv50 ティアマト・マグナ","Lv50 Tiamat Omega"],\
			"2":["Lv70 コロッサス・マグナ","Lv70 Colossus Omega"],\
			"3":["Lv60 リヴァイアサン・マグナ","Lv60 Leviathan Omega"],\
			"4":["Lv60 ユグドラシル・マグナ","Lv60 Yggdrasil Omega"],\
			"5":["Lv75 シュヴァリエ・マグナ","Lv75 Luminiera Omega"],\
			"6":["Lv75 セレスト・マグナ","Lv75 Celeste Omega"],\
			"7":["Lv75 スーペルヒガンテ"," "]\
			}



class MyStreamer(TwythonStreamer):
	
	def on_success(self, data):
		if 'text' in data:
			if (u'参加者募集' in data['text']):
				tweet_id = data['id']
				text = data['text']
				text = text.split(u':',1)
				text = text[1].split("L",1) #idだけにする,text[0]はid
				battle_id = text[0].strip()
				print(battle_id)
				process = subprocess.Popen('pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
				process.communicate(battle_id.encode('utf-8'))
				
	def on_error(self, status_code, data):
		print (status_code, data)

	def write_to_clipboard(self,output):
		process = subprocess.Popen('pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
		process.communicate(output.encode('utf-8'))


for x in (argvs):
	print (enemy_info_dict[x][0])
stream = MyStreamer(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
#stream.statuses.filter(track= n)

def serch(enemy_name):
	stream.statuses.filter(track = (enemy_name[0] or enemy_name[1]))

pool = Pool(4)
for x in (argvs):
	result = pool.apply_async(serch, (enemy_info_dict[x], ))

result.wait()
使い方

1.適当な名前で保存する.(ここではgbf-raider.py)
2terminalでgbf-raider.py 1 (1だとティアマト,2だとコロッサスと番号で管理)
3terminalの画面に敵の名前とidが表示される
4クリップボードにidがコピーされるのであとは貼り付けるだけ

所感

本当は2つの引数を渡したかったのですが,上手くいかず.一応二つの引数を渡しても行ける時は行ける.誰か教えてください.そもそも正しい書き方も知らないです.
subprocess周辺を理解して作り直す予定(予定)
Windowsの環境を作るのが面倒なのでクリップボード関連が試せれません

これで鈴瑚に平穏なグラブルライフが訪れた(完)