def do_report(request_token, oauth_verifier, accounts, block=False):
    logger = logging.getLogger(__name__)
    if not logger.hasHandlers():
        logger.addHandler(logging.StreamHandler())
        logger.setLevel(logging.INFO)

    output = ''
    try:
        twitter_auth = OAuthHandler(settings.CONSUMER_KEY,
                                    settings.CONSUMER_SECRET)
        twitter_auth.request_token = {
            'oauth_token': request_token,
            'oauth_token_secret': oauth_verifier
        }
        twitter_auth.get_access_token(oauth_verifier)
        twitter_api = API(twitter_auth,
                          wait_on_rate_limit=True,
                          wait_on_rate_limit_notify=True,
                          retry_count=0,
                          timeout=5)
        for account_name, account_type in accounts.items():
            output += 'Reporting: ' + account_name + '\n'
            try:
                if account_type == 'user_id':
                    user = twitter_api.report_spam(user_id=account_name,
                                                   perform_block=block)
                else:
                    user = twitter_api.report_spam(screen_name=account_name,
                                                   perform_block=block)
                output += 'Reported: https://twitter.com/' + user.screen_name + '\n'
                logger.info('Reported: https://twitter.com/' +
                            user.screen_name)
            except TweepError as e:
                if e.api_code == 34:  # Account does not exist, skip
                    output += e.reason + '\n'
                else:
                    raise e
    except TweepError as e:
        output += e.reason + '\n'
    output += 'Done(' + str(datetime.now()) + ')'
    return escape(output)
예제 #2
0
파일: views.py 프로젝트: 7pairs/twingo2
def twitter_callback(request):
    """
    Twitterからのコールバック時に呼び出される。

    :param request: リクエストオブジェクト
    :type request: django.http.HttpRequest
    :return: 遷移先を示すレスポンスオブジェクト
    :rtype: django.http.HttpResponse
    """
    # セッションからリクエストトークンを取得する
    request_token = request.session.get('request_token')
    if not request_token:
        request.session.clear()
        return HttpResponse('Unauthorized', status=401)

    # Twitterからの返却値を取得する
    oauth_token = request.GET.get('oauth_token')
    oauth_verifier = request.GET.get('oauth_verifier')

    # セッションの値とTwitterからの返却値が一致しない場合は処理を中断する
    if request_token.get('oauth_token') != oauth_token:
        request.session.clear()
        return HttpResponse('Unauthorized', status=401)

    # アクセストークンを取得する
    oauth_handler = OAuthHandler(settings.CONSUMER_KEY, settings.CONSUMER_SECRET)
    oauth_handler.request_token = request_token
    access_token = oauth_handler.get_access_token(oauth_verifier)

    # 認証処理を実行する
    authenticated_user = authenticate(access_token=access_token)
    if authenticated_user:
        login(request, authenticated_user)
    else:
        request.session.clear()
        return HttpResponse('Unauthorized', status=401)

    # ログイン後に遷移すべき画面にリダイレクトする
    url = request.session.get('next', getattr(settings, 'AFTER_LOGIN_URL', '/'))
    return HttpResponseRedirect(url)
예제 #3
0
def login1(request):
    try:
        request_token1 = session['request_token']
        del session['request_token']

        auth = OAuthHandler(ak, aks)
        auth.request_token = request_token1

        verifier = request.GET.get('oauth_verifier')
        if verifier is None: return render(request, 'invalid.html', {})
        auth.get_access_token(verifier)
        key, secret = auth.access_token, auth.access_token_secret
        auth.set_access_token(key, secret)
        twitter_client = API(auth, wait_on_rate_limit=True)

        tweets_id = []
        tweets_user = {}
        tweets_url_count = {}

        now = datetime.now()

        for tweet in twitter_client.home_timeline():

            if now < (tweet.created_at - timedelta(hours=(24 * 7))): break

            if tweet.entities['urls'] != []:
                #*************** entering into database**********
                try:
                    obj = TweetsDetails()
                    obj.created_at = str(tweet.created_at)[:19]
                    obj.tweet_id = tweet.id
                    obj.tweet_by = tweet.user.screen_name
                    obj.user_twitter_id = myself.screen_name
                    unique_str = myself.screen_name + str(tweet.id)
                    obj.unique = unique_str
                    obj.save()
                except:
                    l = 0

                l = len(tweet.entities['urls'])

                if str(tweet.user.screen_name) in tweets_user:
                    tweets_user[str(tweet.user.screen_name)] += l

                else:
                    tweets_user[str(tweet.user.screen_name)] = l

                for i in range(l):
                    if tweet.entities['urls'][i]['url'] in tweets_url_count:
                        tweets_url_count[tweet.entities['urls'][i]['url']] += 1
                    else:
                        tweets_url_count[tweet.entities['urls'][i]['url']] = 1

                tweets_id.append(int(tweet.id))

        top_url_counts, top_active_users, embed_links = [], [], []

        for x in tweets_url_count.keys():
            top_url_counts.append([tweets_url_count[x], x])

        for x in tweets_user:
            top_active_users.append([tweets_user[x], x])

        for id in tweets_id:
            embReqUrl = 'https://publish.twitter.com/oembed?url=https%3A%2F%2Ftwitter.com%2FInterior%2Fstatus%2F' + str(
                id)
            embResp = requests.get(embReqUrl).json()
            embed_links.append(embResp['html'])

        top_active_users.sort(reverse=True)
        top_url_counts.sort(reverse=True)

        if len(top_active_users) > 3: top_active_users = top_active_users[:3]
        if len(top_url_counts) > 3: top_url_counts = top_url_counts[:3]

        if len(top_active_users) == 0: top_active_users.append(['-', '-'])
        if len(top_url_counts) == 0: top_url_counts.append(['-', '-'])

        x = []

        #Modifying tweet embed link as a string

        s = ' tw-align-center'
        for i in range(len(embed_links)):
            embed_links[i] = embed_links[i][:len(embed_links[i]) - 86]
            embed_links[i] = embed_links[i][:32] + s + embed_links[i][32:]
            x.append(embed_links[i])

        finaldict = {}
        finaldict['embedlink'] = x
        finaldict['urlcount'] = top_url_counts
        finaldict['topuser'] = top_active_users

        return render(request, 'second page.html', finaldict)

    except Exception as e:
        print(e)
        return render(request, 'invalid.html', {})