[https://github.com/imperatrona/twitter-scraper] Scrape the Twitter frontend API without authentication with Golang.
Find a file
Nomadic efa4f96e3c Merge pull request #7 from mind1949/master
use Context to send cancelation signals to goroutines
2020-06-12 17:05:25 +03:00
.github/workflows Rename workflow 2019-09-21 12:07:49 +03:00
.gitignore add scrap tweets for any search query feature 2020-05-14 14:59:33 +02:00
go.mod chore: support go module 2020-02-14 21:46:15 +08:00
go.sum chore: support go module 2020-02-14 21:46:15 +08:00
LICENSE Add MIT license 2020-02-11 14:40:05 +02:00
profile.go Fix some golangci-lint warnings 2020-05-14 21:52:55 +03:00
profile_test.go Fix some golangci-lint warnings 2020-05-14 21:52:55 +03:00
README.md use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
search.go use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
search_test.go use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
trends.go Fix some golangci-lint warnings 2020-05-14 21:52:55 +03:00
trends_test.go Improve error msg 2020-02-14 16:10:29 +02:00
tweets.go use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
tweets_test.go use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
util.go misspell 2020-02-14 16:21:05 +02:00

Twitter Scraper

Golang implementation of python library https://github.com/kennethreitz/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.

Usage

Get user tweets

package main

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

func main() {
    for tweet := range twitterscraper.GetTweets("kennethreitz", 25) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.HTML)
    }
}

It appears you can ask for up to 25 pages of tweets reliably (~486 tweets).

Search tweets by query standard operators

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

package main

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

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

The search ends if we have 50 tweets.

See https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators for build standard queries.

Get profile

package main

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

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

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

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

Installation

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