Skip to content

Instantly share code, notes, and snippets.

@nwithan8
Last active November 18, 2020 19:42
Show Gist options
  • Select an option

  • Save nwithan8/8bbe9bdfef1060ded051fad3b3680874 to your computer and use it in GitHub Desktop.

Select an option

Save nwithan8/8bbe9bdfef1060ded051fad3b3680874 to your computer and use it in GitHub Desktop.
See what someone else sees on their Twitter timeline by mirroring their timeline to a Twitter list
#!/usr/bin/python3
import tweepy
import argparse
# Fill out Twitter API credentials below
consumer_key = 'xxxx'
consumer_secret = 'xxxx'
access_token = 'xxxx'
access_secret = 'xxxx'
parser = argparse.ArgumentParser(description="Mirror someone's Twitter timeline onto a Twitter list.")
parser.add_argument('-u',
'--username',
type=str,
required=True,
help='The user whose timeline you want to mirror')
parser.add_argument('-l',
'--list_name',
type=str,
default=None,
help="Name of the new Twitter list")
args = parser.parse_args()
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
twitter = tweepy.API(auth)
def y_n_prompt(prompt: str):
response = input(f"{prompt} (Y/N) ")
if response.lower() == 'y':
return True
return False
def _get_existing_list(name: str):
for list in twitter.lists_all(screen_name=twitter.me().screen_name):
if list.name == name:
modify = y_n_prompt(prompt=f"The list '{name}' already exists on your account.\n"
f"Would you like to modify this list?")
if not modify:
print("Exiting...")
exit(0)
return list
return None
def _clear_list_members(list):
for member in twitter.list_members(list_id=list.id):
if not remove_user_from_list(user=member, list=list):
print(f"Could not remove {member.screen_name} from list.")
def create_list(name: str, description: str = None, private: bool = False):
return twitter.create_list(name=name, mode=('private' if private else 'public'), description=description)
def _strip_at(screen_name: str):
if screen_name.startswith("@"):
return screen_name[1:]
return screen_name
def _make_full_url(uri: str):
return f"https://twitter.com{uri}"
def add_user_to_list(user, list):
try:
twitter.add_list_members(user_id=[user.id], list_id=list.id)
return True
except:
return False
def remove_user_from_list(user, list):
try:
twitter.remove_list_members(user_id=[user.id], list_id=list.id)
return True
except:
return False
if __name__ == '__main__':
user_screen_name = args.username
list_name = args.list_name
if not list_name:
list_name = f"What {user_screen_name} Sees"
try:
target_user = twitter.get_user(screen_name=user_screen_name)
except:
raise Exception(f"Could not find {user_screen_name}")
twitter_list = _get_existing_list(name=list_name)
if twitter_list:
print(f"Resetting members of '{list_name}'...")
_clear_list_members(list=twitter_list)
elif not twitter_list:
print(f"Creating '{list_name}' list...")
twitter_list = create_list(name=list_name)
for user in tweepy.Cursor(twitter.friends, screen_name=_strip_at(screen_name=user_screen_name)).items():
if add_user_to_list(user=user, list=twitter_list):
print(f"Added {user.screen_name}.")
else:
print(f"Could not add {user.screen_name}")
if add_user_to_list(user=target_user, list=twitter_list):
print(f"Added {target_user.screen_name}.")
else:
print(f"Could not add {target_user.screen_name}")
print(f"View at {_make_full_url(twitter_list.uri)}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment