twikit Documentation

Twitter API Scraper | Without an API key | Twitter Internal API | Free | Twitter scraper | Twitter Bot

4,377 stars Python Python 1 file Β· ~1,732 tokens #bot#client#python#python-web-scraper#python3#scrape#scraper#scraping
RAW Doc

File: README.md

[!NOTE]
https://github.com/d60/twitter_login (under development)



[ζ—₯本θͺž]
[δΈ­ζ–‡]

Twikit

A Simple Twitter API Scraper

You can use functions such as posting or searching for tweets without an API key using this library.

πŸ”΅ Discord

[!NOTE]
Released twikit_grok an extension for using Grok AI with Twikit.
For more details, visit: https://github.com/d60/twikit_grok.

Features

No API Key Required

This library uses scraping and does not require an API key.

Free

This library is free to use.

Functionality

By using Twikit, you can access functionalities such as the following:

  • Create tweets

  • Search tweets

  • Retrieve trending topics

  • etc...

Installing

bash
pip install twikit

Quick Example

Define a client and log in to the account.

python
import asyncio
from twikit import Client

USERNAME = 'example_user'
EMAIL = '[email protected]'
PASSWORD = 'password0000'

# Initialize client
client = Client('en-US')

async def main():
    await client.login(
        auth_info_1=USERNAME,
        auth_info_2=EMAIL,
        password=PASSWORD,
        cookies_file='cookies.json'
    )

asyncio.run(main())

Create a tweet with media attached.

python
# Upload media files and obtain media_ids
media_ids = [
    await client.upload_media('media1.jpg'),
    await client.upload_media('media2.jpg')
]

# Create a tweet with the provided text and attached media
await client.create_tweet(
    text='Example Tweet',
    media_ids=media_ids
)

Search the latest tweets based on a keyword

python
tweets = await client.search_tweet('python', 'Latest')

for tweet in tweets:
    print(
        tweet.user.name,
        tweet.text,
        tweet.created_at
    )

Retrieve user tweets

python
tweets = await client.get_user_tweets('123456', 'Tweets')

for tweet in tweets:
    print(tweet.text)

Send a dm

python
await client.send_dm('123456789', 'Hello')

Get trends

python
await client.get_trends('trending')

More Examples: examples

Contributing

If you encounter any bugs or issues, please report them on issues.

If you find this library useful, consider starring this repository⭐️


File: docs/index.rst

Welcome to twikit's documentation!

.. toctree::
:maxdepth: 1
:caption: Contents:

twikit

Indices and tables

  • :ref:genindex
  • :ref:modindex
  • :ref:search

File: docs/twikit.rst

twikit package

.. automodule:: twikit
:members:
:undoc-members:

Client

.. autoclass:: twikit.client.client.Client
:members:
:undoc-members:
:member-order: bysource

Tweet

.. automodule:: twikit.tweet
:members:
:exclude-members: TweetTombstone
:member-order: bysource

User

.. automodule:: twikit.user
:members:
:undoc-members:
:member-order: bysource

Message

.. automodule:: twikit.message
:members:
:undoc-members:
:member-order: bysource

Streaming

With the streaming API, you can receive real-time events such as tweet engagements,
DM updates, and DM typings. The basic procedure involves looping through the
stream session obtained with :attr:.Client.get_streaming_session and, if necessary,
updating the topics to be streamed using :attr:.StreamingSession.update_subscriptions.

Example Code:

.. code-block:: python

from twikit.streaming import Topic

topics = {
Topic.tweet_engagement('1739617652'), # Stream tweet engagement
Topic.dm_update('17544932482-174455537996'), # Stream DM update
Topic.dm_typing('17544932482-174455537996') # Stream DM typing
}
session = client.get_streaming_session(topics)

for topic, payload in session:
if payload.dm_update:
conversation_id = payload.dm_update.conversation_id
user_id = payload.dm_update.user_id
print(f'{conversation_id}: {user_id} sent a message')

text
if payload.dm_typing:
       conversation_id = payload.dm_typing.conversation_id
       user_id = payload.dm_typing.user_id
       print(f'{conversation_id}: {user_id} is typing')

   if payload.tweet_engagement:
       like = payload.tweet_engagement.like_count
       retweet = payload.tweet_engagement.retweet_count
       view = payload.tweet_engagement.view_count
       print(f'Tweet engagement updated likes: {like} retweets: {retweet} views: {view}')

.. automodule:: twikit.streaming
:members:
:undoc-members:
:member-order: bysource

Media

.. autoclass:: twikit.media.Media
:undoc-members:
:member-order: bysource

.. autoclass:: twikit.media.Photo
:show-inheritance:
:undoc-members:
:member-order: bysource

.. autoclass:: twikit.media.Video
:show-inheritance:
:undoc-members:
:member-order: bysource
:members: get_subtitles

.. autoclass:: twikit.media.AnimatedGif
:show-inheritance:
:undoc-members:
:member-order: bysource

.. autoclass:: twikit.media.Stream
:undoc-members:
:member-order: bysource
:members: get, download

Trend

.. automodule:: twikit.trend
:members:
:undoc-members:
:member-order: bysource

List

.. autoclass:: twikit.list.List
:members:
:undoc-members:
:member-order: bysource

Community

.. automodule:: twikit.community
:members:
:undoc-members:
:member-order: bysource

Notification

.. autoclass:: twikit.notification.Notification
:members:
:undoc-members:
:member-order: bysource

Geo

.. autoclass:: twikit.geo.Place
:members:
:undoc-members:
:member-order: bysource

Capsolver

.. autoclass:: twikit._captcha.capsolver.Capsolver
:members:
:undoc-members:
:member-order: bysource
:exclude-members: create_task,get_task_result,solve_funcaptcha

Utils

.. autoclass:: twikit.utils.Result
:members:
:undoc-members:
:member-order: bysource

Errors

.. automodule:: twikit.errors
:members:
:undoc-members:
:member-order: bysource