Open kdmgs110 opened 6 years ago
ん~でもあれだな、キーワードごとに効果があるのか見たいから、 すでにいいねしたユーザーの情報をとってきて、その人のユーザーIDがフォロワーか見ることができるのか見れたほうが便利そう。 キーワードから、どのくらいのユーザーからのフォロバがあったか見たいなぁ。
/show/
とりあえずここまで実装。残りは実装していない関数を作っていく。
def getQueryStats(query_id):
#フォロワーのツイッター名がいいねしたユーザーの中に含まれている数を出す
liked_user_ids = getLikedUserIds(query) #いいねしたユーザーIDを取り出す
follower_user_ids = getFolloweUserIds() #フォロワーのユーザーIDを取り出す
follow_back_user_ids = [] #いいねしていてかつフォロワーのユーザーIDを取り出す
for liked_user_id in liked_user_ids:
if liked_user_id in follower_user_ids:
follow_back_user_ids.append(liked_user_id)
res = {
"liked_count": liked_user_ids,
"follow_backs": follow_back_user_ids
}
return res
以下のコードを実装
def getStats(query_id):
"""
キーワードIDから、いいねしたユーザーのID・フォローバックしてくれたユーザーのIDを返します。
"""
try:
liked_user_ids = getLikedUserIds(query_id) #いいねしたユーザーIDを取り出す
print(liked_user_ids)
follower_user_ids = getFollowersUserIds() #フォロワーのユーザーIDを取り出す
print(follower_user_ids)
follow_back_user_ids = [] #いいねしていてかつフォロワーのユーザーIDを取り出す
for liked_user_id in liked_user_ids:
if liked_user_id in follower_user_ids:
print("{} follows back you".format(liked_user_id))
follow_back_user_ids.append(liked_user_id)
res = {
"liked_user_ids": liked_user_ids,
"follow_back_user_ids": follow_back_user_ids
}
return res
except Exception as e:
print(e)
res = {
"liked_user_ids": "FAILED",
"follow_back_user_ids": "FAILED"
}
return res
* Debugger PIN: 337-201-509
Error binding parameter 0 - probably unsupported type.
{'liked_user_ids': 'FAILED', 'follow_back_user_ids': 'FAILED'}
127.0.0.1 - - [06/Apr/2018 08:44:59] "GET /show/10 HTTP/1.1" 200 -
Error binding parameter 0 - probably unsupported type.
をググったらSQLite3がらみかもしれん
https://github.com/scraperwiki/code-scraper-in-browser-tool/issues/76
likeしたあとの挙動
127.0.0.1 - - [07/Apr/2018 07:41:33] "GET /like/13/ HTTP/1.1" 302 -
[('yasulab',), ('taiko_megane',), ('michiminstar',), ('yuina_i',), ('yuina_i',), ('yuina_i',), ('natsumi_m_723',), ('taiko_megane',), ('kisei_pacific',), ('RailsTutorialJP',), ('RailsTutorialJP',), ('Kagamiwomiru',), ('tsukasa_labz',), ('RailsTutorialJP',), ('k21_ikeda',), ('abe00makoto',), ('Koooosuke10',), ('designpatterngf',), ('lessuchots',), ('yusukehappypro',), ('natsumi_m_723',)]
* Detected change in '/mnt/c/workspace/pydev/tweet-analyser/app.py', reloading
* Restarting with stat
* Debugger is active!
* Debugger PIN: 337-201-509
[('yasulab',), ('taiko_megane',), ('michiminstar',), ('yuina_i',), ('yuina_i',), ('yuina_i',), ('natsumi_m_723',), ('taiko_megane',), ('kisei_pacific',), ('RailsTutorialJP',), ('RailsTutorialJP',), ('Kagamiwomiru',), ('tsukasa_labz',), ('RailsTutorialJP',), ('k21_ikeda',), ('abe00makoto',), ('Koooosuke10',), ('designpatterngf',), ('lessuchots',), ('yusukehappypro',), ('natsumi_m_723',)]
[{'message': 'Rate limit exceeded', 'code': 88}]
{'liked_user_ids': 'FAILED', 'follow_back_user_ids': 'FAILED'}
127.0.0.1 - - [07/Apr/2018 07:45:08] "GET /show/13 HTTP/1.1" 200 -
127.0.0.1 - - [07/Apr/2018 07:45:58] "GET /index HTTP/1.1" 200 -
ref #13 いいねした後に処理が止まる
ログが見れないので、ログ出力したうえで修正する。
そこの処理の流れ。
@app.route('/show/<id>')
def showQuery(id):
queryList = getQueryById(id)
query = getQueryFromQueryId(id)
stats = getStats(id)
print(stats)
return render_template('query.html', queryList = queryList, query = query, stats = stats)
def getQueryById(id):
conn = sqlite3.connect(DATABASE)
c = conn.cursor()
selectAllSQL = "SELECT * FROM like_history WHERE query_id = ? ORDER BY id DESC"
res = c.execute(selectAllSQL,[id])
return res
def getQueryFromQueryId(id):
conn = sqlite3.connect(DATABASE)
c = conn.cursor()
selectIdSQL = "SELECT query FROM query WHERE id = ?"
c.execute(selectIdSQL,[id])
return c.fetchone()
def getStats(query_id):
"""
キーワードIDから、いいねしたユーザーのID・フォローバックしてくれたユーザーのIDを返します。
"""
try:
liked_user_ids = getLikedUserIds(query_id) #いいねしたユーザーIDを取り出す
print(liked_user_ids)
follower_user_ids = getFollowersUserIds() #フォロワーのユーザーIDを取り出す
print(follower_user_ids)
follow_back_user_ids = [] #いいねしていてかつフォロワーのユーザーIDを取り出す
for liked_user_id in liked_user_ids:
if liked_user_id in follower_user_ids:
print("{} follows back you".format(liked_user_id))
follow_back_user_ids.append(liked_user_id)
res = {
"liked_user_ids": liked_user_ids,
"follow_back_user_ids": follow_back_user_ids
}
return res
except Exception as e:
print(e)
res = {
"liked_user_ids": "FAILED",
"follow_back_user_ids": "FAILED"
}
return res
getFollowersUserIds()でツイッターのrate-limitにかかっている可能性がある。 毎回リクエストを送ると、負担がかかるので、更新する感じのほうがよいのかな。
def getFollowersUserIds():
follower_screen_names = []
for follower in api.followers_ids():
follower_screen_names.append(api.get_user(follower).screen_name)
print("{}名のフォロワー数を取得しました".format(len(follower_screen_names)))
return follower_screen_names
ref #14 getFollowersUserIds()をDBで保持できるようにしたい
そこにあるのは タイトル:ユーザー名 あとはユーザーごとに紐づいた、いいねの履歴データで、どのくらいのいいねでコンバージョンに至ったかを可視化できるページを作成する