Skip to content

Instantly share code, notes, and snippets.

@netalkGB
Last active December 1, 2021 16:47
Show Gist options
  • Select an option

  • Save netalkGB/ea7be6e3394bde2f08e52a34eaefbbaa to your computer and use it in GitHub Desktop.

Select an option

Save netalkGB/ea7be6e3394bde2f08e52a34eaefbbaa to your computer and use it in GitHub Desktop.
Twitter API v2で sample stream
import sys
import os
import base64
import json
import urllib.request
import urllib.parse
api_key = os.environ['TWITTER_API_KEY']
api_key_secret = os.environ['TWITTER_API_KEY_SECRET']
def get_bearer_token(api_key, api_key_secret):
credential = '{}:{}'.format(api_key, api_key_secret)
credential_base64 = base64.b64encode(credential.encode()).decode()
url = 'https://api.twitter.com/oauth2/token'
method = 'POST'
headers = {'Authorization': 'Basic {}'.format(credential_base64),
'User-Agent': 'autopilot',
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
params = {'grant_type': 'client_credentials'}
data = urllib.parse.urlencode(params).encode('utf-8')
request = urllib.request.Request(
url, data=data, headers=headers, method=method)
res = urllib.request.urlopen(request)
response_data = res.read()
response_json = json.loads(response_data)
return response_json['access_token']
def request(token):
method = 'GET'
url = 'https://api.twitter.com/2/tweets/sample/stream'
headers = {'Authorization': 'Bearer {}'.format(token),
'User-Agent': 'autopilot',
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
request = urllib.request.Request(
url, headers=headers, method=method)
res = urllib.request.urlopen(request)
for line in res:
try:
data = json.loads(line.decode('utf-8'))
print(data)
except json.JSONDecodeError as e:
print(e, file=sys.stderr)
pass
if __name__ == '__main__':
# https://developer.twitter.com/ja/docs/authentication/api-reference/token このメソッドで受信したトークンはキャッシュする必要があります。試行の頻度が多すぎると、リクエストはコード99とともにHTTP 403で拒否されます。
token = get_bearer_token(api_key, api_key_secret)
request(token)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment