[https://github.com/imperatrona/twitter-scraper] Scrape the Twitter frontend API without authentication with Golang.
Find a file
Nomadic b9ae4a1de2 Merge pull request #19 from JustHumanz/master
add SetSearchLive,SetSearchPhotos, and SetSearchVideos
2020-12-23 18:51:43 +02:00
.github/workflows Create codeql-analysis.yml 2020-10-02 10:07:08 +03:00
.gitignore add scrap tweets for any search query feature 2020-05-14 14:59:33 +02:00
api.go Add Scraper object 2020-12-12 23:33:57 +02:00
api_test.go Add Scraper object 2020-12-12 23:33:57 +02:00
go.mod Total refactoring 2020-12-11 20:58:49 +02:00
go.sum Total refactoring 2020-12-11 20:58:49 +02:00
LICENSE Add MIT license 2020-02-11 14:40:05 +02:00
profile.go Add Scraper object 2020-12-12 23:33:57 +02:00
profile_test.go Fix profile test 2020-12-23 10:37:08 +02:00
README.md add SearchLive SearchPhotos SearchVideos 2020-12-20 00:20:27 +07:00
scraper.go change prefix 2020-12-21 19:42:07 +07:00
search.go add SearchLive SearchPhotos SearchVideos 2020-12-20 00:20:27 +07:00
search_test.go Total refactoring 2020-12-11 20:58:49 +02:00
trends.go Add Scraper object 2020-12-12 23:33:57 +02:00
trends_test.go Total refactoring 2020-12-11 20:58:49 +02:00
tweets.go Add Scraper object 2020-12-12 23:33:57 +02:00
tweets_test.go Total refactoring 2020-12-11 20:58:49 +02:00
types.go Returned the HTML field of the tweet 2020-12-17 10:39:45 +02:00
util.go Fix username/hashtag regexp 2020-12-18 15:28:33 +02:00

Twitter Scraper

Twitter's API is annoying to work with, and has lots of limitations — luckily their frontend (JavaScript) has it's own API, which I reverse-engineered. No API rate limits. No tokens needed. No restrictions. Extremely fast.

You can use this library to get the text of any user's Tweets trivially.

Installation

go get -u github.com/n0madic/twitter-scraper

Usage

Get user tweets

package main

import (
    "context"
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    for tweet := range scraper.GetTweets(context.Background(), "Twitter", 50) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.Text)
    }
}

It appears you can ask for up to 50 tweets (limit ~3200 tweets).

Search tweets by query standard operators

Tweets containing “twitter” and “scraper” and “data“, filtering out retweets:

package main

import (
    "context"
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    for tweet := range scraper.SearchTweets(context.Background(),
        "twitter scraper data -filter:retweets", 50) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.Text)
    }
}

The search ends if we have 50 tweets.

Search tweet in realtime

scraper.SearchLive(true)

See Rules and filtering for build standard queries.

Get profile

package main

import (
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    profile, err := scraper.GetProfile("Twitter")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", profile)
}
package main

import (
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    trends, err := scraper.GetTrends()
    if err != nil {
        panic(err)
    }
    fmt.Println(trends)
}

Use http proxy

err := scraper.SetProxy("http://localhost:3128")
if err != nil {
    panic(err)
}

Load timeline with tweet replies

scraper.WithReplies(true)

Default Scraper (Ad hoc)

In simple cases, you can use the default scraper without creating an object instance

import twitterscraper "github.com/n0madic/twitter-scraper"

// for tweets
twitterscraper.GetTweets(context.Background(), "Twitter", 50)
// for tweets with replies
twitterscraper.WithReplies(true).GetTweets(context.Background(), "Twitter", 50)

// for search
twitterscraper.SearchTweets(context.Background(), "twitter", 50)

// for profile
twitterscraper.GetProfile("Twitter")

// for trends
twitterscraper.GetTrends()