kdmgs110 / Tweet-Analyser

Flaskでつくれるツイート分析アプリです。
4 stars 0 forks source link

キーワードのコンバージョン情報が見れるキーワードページを作成する #3

Open kdmgs110 opened 6 years ago

kdmgs110 commented 6 years ago

そこにあるのは タイトル:ユーザー名 あとはユーザーごとに紐づいた、いいねの履歴データで、どのくらいのいいねでコンバージョンに至ったかを可視化できるページを作成する

kdmgs110 commented 6 years ago

ん~でもあれだな、キーワードごとに効果があるのか見たいから、 すでにいいねしたユーザーの情報をとってきて、その人のユーザーIDがフォロワーか見ることができるのか見れたほうが便利そう。 キーワードから、どのくらいのユーザーからのフォロバがあったか見たいなぁ。

kdmgs110 commented 6 years ago
kdmgs110 commented 6 years ago

/show/ ここにしゅうせいを入れる

kdmgs110 commented 6 years ago

統計情報の画像

stats

kdmgs110 commented 6 years ago

TODO

kdmgs110 commented 6 years ago

とりあえずここまで実装。残りは実装していない関数を作っていく。

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
kdmgs110 commented 6 years ago

以下のコードを実装

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 -
kdmgs110 commented 6 years ago

Error binding parameter 0 - probably unsupported type.をググったらSQLite3がらみかもしれん

https://github.com/scraperwiki/code-scraper-in-browser-tool/issues/76

kdmgs110 commented 6 years ago

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 -
kdmgs110 commented 6 years ago

ref #13 いいねした後に処理が止まる

ログが見れないので、ログ出力したうえで修正する。

kdmgs110 commented 6 years ago

そこの処理の流れ。


@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
kdmgs110 commented 6 years ago

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
kdmgs110 commented 6 years ago

ref #14 getFollowersUserIds()をDBで保持できるようにしたい