zoghal / TwebAPI

A liberally to control a twitter account without the use of twitter official API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TwebAPI

This Library can be used as a replacement for the official Twitter API, it relies on mimicking the web browser requests to the twitter backend.

Installation

pip install https://github.com/HashimHL/TwebAPI/archive/master.zip

Usage

from TwebAPI import Tapi
tapi=Tapi()
tweets=tapi.search("cats",search_type="top")

the tweets will be in a json format similar to the one obtained from the Twitter API. However, not all methods can be done without login.

tapi.login("username","password")
tweet=tapi.post_tweet("I like cats",media="path/to/picutre.png") # return the tweeted tweet json

after the first login the cookies will be saved in a file called twitter_user_cookies to avoid multiple logins and the phone/email verification or captcha. to change the folder path to ciks simply do tapi=Tapi(cookies_path='ckis') and to turn off the use of cookies do tapi.login("username","password",use_old_user_cookie=False)

Methods

login

req=Tapi.login(username, password, use_old_user_cookie=False)
#username (str): can be the @screen_name or the email account or the phone number
#password (str): your password
#use_older_user_cookies (bool): whether or not to use the saved cookies for login
#returns the request object for the login

post_tweet

tweet=Tapi.post_tweet(text, media=None, media_id=None, in_reply_to_status_id=None, print_log=True)
#text (str): the text of the tweet
#media (str or list): the path for the media, or a list of paths at most 4. Please check the twitter documenation https://developer.twitter.com/en/docs/media/upload-media/overview
#media_id (str or list): the media_id or a list of media_id
#in_reply_to_status_id (str or int): the tweet id that will be replied to
#print_log (bool): wether to print the status of the media being uploaded
#return the json of the tweet

upload_chunked

media_info=Tapi.upload_chunked(filename,print_log=True,f=None)
#filename (str): the path of the media
#print_log (bool): wether to print the status of the media being uploaded
#f (file object): the media will be retrieved from the file object but still needs the filename for mimetype detection
#return a json object (dict) with information about the media which includes the media_id

get_tweets

tweets=Tapi.get_tweets(screen_name=None,user_id=None,include_tweet_replies=False,tweet_mode='compact',count=40)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#include_tweet_replies (bool): include the replies of the user
#tweet_mode (str): you can use 'compact' to get limited information about the tweet or use 'extended' to get them all (read more in https://developer.twitter.com/en/docs/tweets/tweet-updates.html)
#count (int): the maximum number of downloaded tweets (may not be the same)
#return a list of tweets jsons from the user

get_likes

tweets=Tapi.get_likes(screen_name=None,user_id=None,tweet_mode='compact',count=40)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#include_tweet_replies (bool): include the replies of the user
#tweet_mode (str): you can use 'compact' to get limited information about the tweet or use 'extended' to get them all (read more in https://developer.twitter.com/en/docs/tweets/tweet-updates.html)
#count (int): the maximum number of downloaded tweets (may not be the same)
#return a list of tweets jsons that the user liked

get_friends

users=Tapi.get_friends(screen_name=None,user_id=None,count=40)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#count (int): the maximum number of downloaded users (may not be the same)
#return a list of users json that the user follow

get_followers

users=Tapi.get_followers(screen_name=None,user_id=None,count=40)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#count (int): the maximum number of downloaded users (may not be the same)
#return a list of users json that follow the user

get_bookmark

tweets=Tapi.get_bookmark(count=20)
#count (int): the maximum number of downloaded tweets from the bookmark
#return a list of tweets jsons from the bookmark of the logged in user

search

items=Tapi.search(q,search_type='top',count=20,tweet_mode='compact')
#q (str): the query string
#search_type (str): can be one of ['top','latest','people','photos','videos']
#count (int): the number of downloaded items
#tweet_mode (str): you can use 'compact' to get limited information about the tweet or use 'extended' to get them all (read more in https://developer.twitter.com/en/docs/tweets/tweet-updates.html)
#return a list of tweet json except when search_type='people' it returns user json

users_lookup

users=Tapi.users_lookup(self,screen_name=None,user_id=None)
#screen_name (str or list): the @screen_name of the user or a list of @screen_names for example ['twitter','google','facebook']
#user_id (str or list): the user id or a list of user ids
#return a user json or a list of user json that contains information about the user/users

create_favorite

tweet=Tapi.create_favorite(tweet_id)
#tweet_id (str or int)
#return a json for the liked tweet

destroy_favorite

tweet=Tapi.destroy_favorite(tweet_id)
#tweet_id (str or int)
#return a json for the unliked tweet

add_bookmark

tweet=Tapi.add_bookmark(tweet_id)
#tweet_id (str or int)
#return a json for the bookmarked tweet

remove_bookmark

tweet=Tapi.remove_bookmark(tweet_id)
#tweet_id (str or int)
#return a json for the un-bookmarked tweet

follow

user=Tapi.follow(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the followed user
unfollow
user=Tapi.unfollow(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the unfollowed user

mute

user=Tapi.mute(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the muted user

unmute

user=Tapi.unmute(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the unmuted user

block

user=Tapi.block(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the blocked user

unblock

user=Tapi.unblock(screen_name=None,user_id=None)
#screen_name (str): the @screen_name of the user
#user_id (str): the user id (its recomneded to use the user_id instead of the screen_name)
#return a json for the unblocked user

Cursor

the Cursor class can fetch data or run function continesly for example

from TwebAPI import Cursor
users=[]
for user in Cursor(tapi.get_friends,screen_name="twitter",count=50).items(16,tqdm_bar=True):
    users.append(user)
print(len(users)==16) # True

you can also do it with tapi.search or tapi.get_tweets or any other method that can go back in time. the use of tqdm_bar=True is just to print out the progress bar for the cursor you can also use .page instead of .items, and the cursor will stop if it collected the required number of items or pages or if there is no more data to collect

Additional Details

The reason behind recominding the use of user_id over screen_name is that some method can only use the user_id so when the screen_name is used a tapi.users_lookup will be used to get the user_id, and that can accumulate unnecessary requests to twitter backend.

This library should not be used for production product and its preferred to use the official Twitter API since it may voliate twitter polices https://help.twitter.com/en/rules-and-policies/twitter-automation

There is a rate limit on using some methods that can result in a temporary suspention of the service, please make sure to not run alot of method and adding time.sleep between calls, also using higher number of count in Cursor might help with this issue.

About

A liberally to control a twitter account without the use of twitter official API

License:MIT License


Languages

Language:Python 100.0%