リプライされた単語でwikipediaの概要をリプライし返すbotを作ってみた
はじめに
使用言語 python3
使用API twitterAPI,MediaWiki API
OS windows10
筆者はpython初心者
プログラムの大体の動き
twitterAPIにアクセス→リプライされたときにif文でwikiが入ってるか確認→data=wikiapi.getinfo(text)
でWikiapi.pyのgetinfoに行く→mediawikiapiにアクセス→jsonを使って概要を取得→ツイート
まとめると、リプライにwikiという単語が入っていたら、その後ろの単語をmediawikiapiで検索してリプライし返すbot
ソースコード
#tweet.py
import tweepy
import Wikiapi
import datetime
CK="" #Consumer Key
CS="" #Consumer Secret
AT="" #Access Token
AS="" #Access Token Secret
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
class Listener(tweepy.StreamListener):
def on_status(self, status):
status.created_at += datetime.timedelta(hours=9)
if (status.in_reply_to_screen_name) == api.me().screen_name:
status_id = status.id
text = status.text.replace("@" + str(api.me().screen_name), "")
text = text.replace(" ", "")
if "wiki" in text:#リプライにwikiが入ってるか確認
text=text.replace("wiki","")
wikiapi=Wikiapi.Wikiapi()
data=wikiapi.getinfo(text)#Wikiapi.pyのgetinfo呼び出し
tweet_rep = "@" + str(status.user.screen_name) + " " + str(data.tweet)+"\n"+str(data.url)
api.update_status(status=tweet_rep,in_reply_to_status_id=status_id)
return True
def on_error(self, status_code):
print('Got an error with status code: ' + str(status_code))
return True
def on_timeout(self):
print('Timeout...')
return True
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
listener = Listener()
stream = tweepy.Stream(auth, listener)
stream.userstream()
#Wikiapi.py
import requests
import json
import urllib
class Wikiapi:
def getinfo(self,word):
word=urllib.parse.quote(word)
api="https://ja.wikipedia.org/w/api.php?action=query&format=json&titles={word}&prop=extracts&redirects=1&exchars=100&explaintext=1"
api=api.format(word=word)
r=requests.get(api)#APIにアクセス
data=json.loads(r.text)
pages=data["query"]["pages"]
for page in pages:
try:
self.tweet=data["query"]["pages"][page]["extract"]#wikiの説明文を参照
self.url="https://ja.wikipedia.org/wiki/"+word#urlもツイートに追加
return self
except KeyError:#記事なかった場合
self.tweet="記事がありませんでした"
return self
解説
#tweet.py
import tweepy
import Wikiapi
import datetime
CK="" #Consumer Key
CS="" #Consumer Secret
AT="" #Access Token
AS="" #Access Token Secret
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
class Listener(tweepy.StreamListener):
def on_status(self, status):
status.created_at += datetime.timedelta(hours=9)
if (status.in_reply_to_screen_name) == api.me().screen_name:
status_id = status.id
text = status.text.replace("@" + str(api.me().screen_name), "")
text = text.replace(" ", "")
if "wiki" in text:#リプライにwikiが入ってるか確認
text=text.replace("wiki","")
wikiapi=Wikiapi.Wikiapi()
data=wikiapi.getinfo(text)#Wikiapi.pyのgetinfo呼び出し
tweet_rep = "@" + str(status.user.screen_name) + " " + str(data.tweet)+"\n"+str(data.url)
api.update_status(status=tweet_rep,in_reply_to_status_id=status_id)
return True
def on_error(self, status_code):
print('Got an error with status code: ' + str(status_code))
return True
def on_timeout(self):
print('Timeout...')
return True
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
listener = Listener()
stream = tweepy.Stream(auth, listener)
stream.userstream()
#Wikiapi.py
import requests
import json
import urllib
class Wikiapi:
def getinfo(self,word):
word=urllib.parse.quote(word)
api="https://ja.wikipedia.org/w/api.php?action=query&format=json&titles={word}&prop=extracts&redirects=1&exchars=100&explaintext=1"
api=api.format(word=word)
r=requests.get(api)#APIにアクセス
data=json.loads(r.text)
pages=data["query"]["pages"]
for page in pages:
try:
self.tweet=data["query"]["pages"][page]["extract"]#wikiの説明文を参照
self.url="https://ja.wikipedia.org/wiki/"+word#urlもツイートに追加
return self
except KeyError:#記事なかった場合
self.tweet="記事がありませんでした"
return self
読みづらいのは許してください
ちょいちょいコメントで解説していますが要点を紹介
if "wiki" in text:
リプライにwikiが入ってるか確認
self.tweet=data["query"]["pages"][page]["extract"]#wikiの説明文を参照
mediawikiapiで取得したjsonから概要があるところにアクセス
挙動
参考にした記事
忘れたので調べておきます
まとめ
読みづらいですけど初心者なのでお許しください
まともなbotを作れてよかった
実用性はないと思う
ここわからない とかあったらコメントとかtwitterで言ってもらえれば120%返します
Author And Source
この問題について(リプライされた単語でwikipediaの概要をリプライし返すbotを作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/OK_im_fine_now/items/23a32cfc90d064234dad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .