Skip to content

Instantly share code, notes, and snippets.

@fratamico
Last active June 19, 2020 15:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fratamico/0a56a342d483882ec1d5fb451676d5ae to your computer and use it in GitHub Desktop.
Save fratamico/0a56a342d483882ec1d5fb451676d5ae to your computer and use it in GitHub Desktop.
Creating a Twitter Collection via API
import json
from requests_oauthlib import OAuth1Session
# For a blog post describing this process more, see:
# https://medium.com/analytics-vidhya/creating-a-twitter-collection-via-api-1378ecfe20df
api_key = 'your api key'
api_secret_key = 'your api secret key'
access_token = 'your access token'
access_token_secret = 'your access token secret'
# twitter oauth
twitter = OAuth1Session(api_key,
client_secret=api_secret_key,
resource_owner_key=access_token,
resource_owner_secret=access_token_secret)
# create
url = 'https://api.twitter.com/1.1/collections/create.json'
params_create = {
'name': 'cutest puppies EVER',
'timeline_order': 'tweet_reverse_chron'
}
r = twitter.post(url, data=params_create)
print(r.json())
print(r.json()['response'])
# 'response': {'timeline_id': 'custom-1180945428222595074'}}
timeline_id = r.json()['response']['timeline_id']
# the collection can be viewed at, eg: https://twitter.com/laurenfratamico/timelines/1180945428222595074
tweet_ids = [1148286877616803840, 1180845365542752256, 1180123991165607937]
# add
url = 'https://api.twitter.com/1.1/collections/entries/add.json'
for tweet_id in tweet_ids:
params_add = {
'tweet_id': tweet_id,
'id': timeline_id
}
r = twitter.post(url, data=params_add)
print(r.json())
# bulk add
url = 'https://api.twitter.com/1.1/collections/entries/curate.json'
# split into batches of 100 for the uploads
n = 100
batches = [tweet_ids[i:i + n] for i in range(0, len(tweet_ids), n)]
print (len(batches))
for batch in batches:
params_add = {
"id": timeline_id,
"changes": []
}
for tweet_id in batch:
sub_params_add = {
"tweet_id": str(tweet_id),
"op": "add"
}
params_add['changes'].append(sub_params_add)
r = twitter.post(url, data=json.dumps(params_add))
print(r.json())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment