使用Twitter API-如何使用承载令牌获得参与端点的身份验证 [英] with the Twitter API - how can I get authentication for the engagement endpoint using a bearer token

查看:69
本文介绍了使用Twitter API-如何使用承载令牌获得参与端点的身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取有关营销仪表板的公司推文的参与度数据.我可以通过Tweepy进行身份验证,以获取基本的Twitter feed数据,但是参与端点给我带来了麻烦.我是否有可能先通过Tweepy进行认证,然后再通过不记名令牌来弄乱事情?

I'm trying to get engagement data for my company's tweets for a marketing dashboard. I am able to authenticate with Tweepy to get basic Twitter feed data, but the engagement endpoint is giving me trouble. Is it possible that I messing things up by autheticating with Tweepy and then with the bearer token?

import tweepy
import requests
import json
import base64
import urllib.parse

consumer_key = <>
consumer_secret = <>
access_token = <>
access_token_secret = <>


auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

print(api.me().name)


def get_tweet_ids():
    scandy_tweets = api.user_timeline('TwitterHandle', count=5)
    tweet_id_list = []
    for twit in scandy_tweets:
        json_str = json.loads(json.dumps(twit._json))
        tweet_id_list.append(json_str['id'])
    return tweet_id_list


def get_bearer_token():
    uri_token_endpoint = 'https://api.twitter.com/oauth2/token'
    key_secret = f"{consumer_key}:{consumer_secret}".encode('ascii')
    b64_encoded_key = base64.b64encode(key_secret)
    b64_encoded_key = b64_encoded_key.decode('ascii')

    auth_headers = {
        'Authorization': 'Basic {}'.format(b64_encoded_key),
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        }

    auth_data = {
        'grant_type': 'client_credentials'
        }

    auth_resp = requests.post(uri_token_endpoint, headers=auth_headers, data=auth_data)
    print(auth_resp.status_code)
    bearer_token = auth_resp.json()['access_token']
    return bearer_token



bearer_token = get_bearer_token()

bearer_header = {
    'Accept-Encoding': 'gzip',
    'Authorization': 'Bearer {}'.format(bearer_token),
    'oauth_consumer_key': consumer_key 
}

recent_tweets = get_tweet_ids()

engage_data = {
    'tweet_id_list': recent_tweets,
    'engagement_types': ['impressions', 'engagements', 'favorites'],
    'groupings':  {'grouping name': {'group_by': ['tweet.id', 'engagement.type']}}
}

uri_28hr_endpoint = 'https://data-api.twitter.com/insights/engagement/28hr'
engagement_resp = requests.post(uri_28hr_endpoint, headers=bearer_header, data=engage_data)


print(engagement_resp.status_code)
print(engagement_resp.json())

当我调用 print(engagement_resp.json())时,我得到以下输出:

When I call print(engagement_resp.json()) I get the following output:

403 {'错误':['您的应用程序ID未经授权.'}}

403 {'errors': ['Your Application ID is not authorized.']}

推荐答案

答案在Andy Piper的评论中.在 Twitter开发人员网站上的此页面的顶部它说:

The answer is in Andy Piper's comment. At the top of this page on Twitter's Developer site it says:

这是一个企业API,仅在我们的托管访问级别内可用.要使用此API,您必须首先在我们的企业销售团队中建立一个帐户

This is an enterprise API available within our managed access levels only. To use this API, you must first set up an account with our enterprise sales team

此页面描述了不同级别的API访问权限,您可以找到可能的方法在标准(免费),高级和企业API层中.

On this page that describes the different levels of API access you can find out what's possible in the Standard (free), Premium, and Enterprise API tiers.

这篇关于使用Twitter API-如何使用承载令牌获得参与端点的身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆