Exemplo n.º 1
0
def get_users_detail_in_follower():
    before_table = diff_ff_table_to_user_table()
    if len(before_table) == 0:
        return True
    # FFTable <- Follower, FriendのDBよりid一覧
    # Fromは詳細情報の存在が確定しているのでToより選択する。

    table_count = 0
    users = list()

    # Pythonの[]表記は、[開始:終点-1]。
    while (True):
        end_point = min(table_count + 100, len(before_table))
        try:
            users.extend(api.lookup_users(before_table[table_count:end_point]))
        except tweepy.RateLimitError:
            return False
        except tweepy.TweepError:
            slack_error_message(traceback.format_exc())
            return False

        # 取得したいユーザー名一覧を座標が超えていたら終了。そうでなければ座標を100(取得数)ずらす。
        if table_count + 100 > end_point:
            # tweepyのuserオブジェクト(戻り値)はそのままでは加工出来ない為、dictに変換する(ややこしい)
            users_dict = [v._json for v in users]
            set_users_detail(users_dict)
            return
        else:
            table_count += 100

    return True
def get_redis():
    """
    Get the working redis instance
    """
    try:
        r = redis.StrictRedis(host=os.getenv('REDIS_HOST', 'localhost'), port=os.getenv('REDIS_PORT', 6379), password=os.getenv('REDIS_PASSWORD'), db=0)
        r.get('test123')
    except Exception:
        r = False
        message = "redis unavailable. Uploaded videos will be duplicated on subsequent executions."
        logging.warning(message)
        slack_error_message(message)
    return r
def upload_video_to_facebook(video):
    """
    Uploads a given video to Facebook Graph API
    """

    session = get_facebook_session()
    files = {}
    if video['thumb_url']:
        thumb_response = requests.get(video['thumb_url'])
        files['thumb'] = thumb_response.content

    request_url = 'https://graph-video.facebook.com/v2.4/%s/videos' % (os.getenv('MTFV_FACEBOOK_ENTITY_ID'))
    response = session.post(request_url, data=video, files=files)
    if not response.ok:
        logging.warning(response.json()['error']['message'])
        slack_error_message(response.json()['error']['message'])
        return
    logging.info(response.content)
    slack_info_message('Uploaded "%s" to https://facebook.com/%s' % (video['title'], response.json()['id']))
    set_value(video['guid'], response.json()['id'])
Exemplo n.º 4
0
def get_valid_user(select_timestamp):
    user_list = list(db_user.find({select_timestamp: 0}))
    get_users_detail_in_follower()  # follow, followerの取得漏れを防ぐ。

    # 0件もヒットしなかった場合は、Slackに報告し、ランダムにユーザーを取得する。(お気に入りユーザー検索を続ける)。
    if len(user_list) == 0:
        slack_error_message("%s 取得対象ユーザーが1件も見つかりませんでした。" % datetime.now())
        sleep(600)
        get_valid_user(select_timestamp)

    # 1件ヒットの場合は、取得したユーザーを返す。
    elif len(user_list) == 1:
        return user_list[0]

    # 2件以上ヒットの場合は、以下の処理を行う。
    # 1. 取得したユーザーごとの得点テーブルを作る。
    # 2. 他のselect_timestampが0以外(つまり計算されている)場合、スコアを+1する。
    # 3. フォロワー数 / 2000をスコアに足す。
    # 4. 最もスコアの多いユーザーを返す。
    else:
        # ユーザーIDと得点の相対表を作っておく。
        return sort_user_id_by_score(user_list, select_timestamp)
def get_facebook_session():
    session = OAuth2Session(
        client_id=os.getenv('FACEBOOK_CLIENT_ID'),
        client_secret=os.getenv('FACEBOOK_CLIENT_SECRET'),
        access_token=os.getenv('FACEBOOK_AUTH_TOKEN'),
    )
    request_url = "https://graph.facebook.com/%s?metadata=1" % (os.getenv('MTFV_FACEBOOK_ENTITY_ID'))
    response = session.get(request_url)
    if response.json()['metadata']['type'] == 'page':
        response = session.get('https://graph.facebook.com/%s/accounts' % (os.getenv('MTFV_FACEBOOK_USER_ID')))
        data = [page for page in response.json()['data'] if page['id'] == os.getenv('MTFV_FACEBOOK_ENTITY_ID')]
        if not data:
            message = "Facebook user account doesn't have access token for page."
            logging.error(message)
            slack_error_message(message)
            exit()
        session = OAuth2Session(
            client_id=os.getenv('FACEBOOK_CLIENT_ID'),
            client_secret=os.getenv('FACEBOOK_CLIENT_SECRET'),
            access_token=data[0]['access_token'],
        )
    return session
Exemplo n.º 6
0
def get_user_action(user_id, page=1, tweet=True):
    try:
        select_function = api.user_timeline if tweet else api.favorites
        c = select_function(user_id=user_id, count=200, page=page)

        if len(c) == 0:
            return

        c_modify = [v._json for v in c]

        db = db_tweet if tweet else db_like
        db.insert_many(c_modify)

        get_user_action(user_id, page + 1, tweet=tweet)

    except tweepy.RateLimitError:
        logging.info("[UserTweet] Stop Iteration, process complete")
        slack_message("[%s] ツイート取得の上限に達しました" % "Timeline" if tweet else "Like")
        sleep(60 * 15)
        get_user_action(user_id, page, tweet=tweet)

    except tweepy.TweepError:
        slack_error_message(traceback.format_exc())
        return