[https://github.com/imperatrona/twitter-scraper] Scrape the Twitter frontend API without authentication with Golang.
Find a file
Alexander Sheiko ae913c7d88 Fix photo
2020-09-19 11:30:05 +03:00
.github/workflows Add schedule to workflow 2020-07-28 10:52:21 +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 Quick dirty fix profile 2020-08-13 17:38:46 +03:00
profile_test.go Quick dirty fix profile 2020-08-13 17:38:46 +03:00
README.md Getting tweets by the maximum number, not by pages as before 2020-06-15 16:16:08 +03:00
search.go Use newRequest() 2020-06-15 15:26:43 +03:00
search_test.go use Context to send cancelation signals to groutines 2020-06-12 21:31:08 +08:00
trends.go Fix trends 2020-08-13 17:39:32 +03:00
trends_test.go Improve error msg 2020-02-14 16:10:29 +02:00
tweets.go Fix photo 2020-09-19 11:30:05 +03:00
tweets_test.go Quick dirty fix GetTweets 2020-09-19 00:57:03 +03:00
util.go Quick dirty fix GetTweets 2020-09-19 00:57:03 +03:00

Twitter Scraper

Golang implementation of python library https://github.com/bisguzar/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() {
    for tweet := range twitterscraper.GetTweets(context.Background(), "Twitter", 50) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.HTML)
    }
}

It appears you can ask for up to 50 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() {
    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 Rules and filtering for build standard queries.

Get profile

package main

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

func main() {
    profile, err := twitterscraper.GetProfile("Twitter")
    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)
}