zedeus / nitter

Alternative Twitter front-end
https://nitter.net
GNU Affero General Public License v3.0
9.74k stars 516 forks source link

R.I.P. Nitter 🪦😭 (...unless?) #919

Closed devgaucho closed 10 months ago

devgaucho commented 1 year ago

https://techcrunch.com/2023/06/30/twitter-now-requires-an-account-to-view-tweets/

the nitter crawler will need to be recreated...

animegrafmays commented 1 year ago

it was working this morning but it appears nitter is now broken. viewing any profile results in the following error being thrown

An error has occured in one of your routes.

Detail: jsony.nim(45) parseHook
asyncfutures.nim(389) read
asyncfutures.nim(389) read
asyncfutures.nim(389) read
asyncfutures.nim(389) read
asyncfutures.nim(389) read
asyncfutures.nim(389) read
Expected { but end reached. At offset: 0
thechesu commented 1 year ago

Libreddit gone tomorrow.

Wonder how long Invidious and FreeTube will last?

cyberseihis commented 1 year ago

It's so over

devgaucho commented 1 year ago

the twitter rank has already dropped 6 places from yesterday to today 🤦‍♂️ https://ciscorank.com/s/twitter.com https://i.imgur.com/e5U9Kox.png

ericpa06 commented 1 year ago

Libreddit gone tomorrow.

Wonder how long Invidious and FreeTube will last?

At least reddit still has the old.reddit.com. Which is a pretty descent front-end (as long as you don't care with privacy), with twitter, you are pretty much forced to use that horrible garbage interface. But yeah, this data rush pretty much will make all platforms to garden walled themselves.

sunlightspectre commented 1 year ago

There are plenty of people who only engage in the modern internet through front-ends; myself being one of them. I have no interest in registering for sites; it took me ages to register a proper git.

One wonders what will happen when these self-inflicted stab-wounds deplete 'profit' rather then generate it?..
Removing access isn't going to make people want to use a site more.
And it certainly won't inflate user numbers, which I'd imagine is the end goal.

C'est la vie.

I'm glad I got to experience the internet as it was.

animegrafmays commented 1 year ago

thoughts?

a02ae1feb7da5958bf7ae451012fad1ab34a974910511745bdcf80f674b8d452

codybrom commented 1 year ago

No chance in hell this is temporary unless it affects ad revenue

orbea commented 1 year ago

Maybe people will be smart enough to stop using proprietary garbage finally...

ericpa06 commented 1 year ago

"Temporary emergency" measure that will always be in place forever.

DuplicantWood commented 1 year ago

This fork is working

https://github.com/PrivacyDevel/nitter/

roryyamm commented 1 year ago

This fork is working

https://github.com/PrivacyDevel/nitter/

But privacydev.net isn't.

animegrafmays commented 1 year ago

I can confirm after building that fork that it also has the same issue

ERROR jsony.nim(45)            parseHook
asyncfutures.nim(389)    read
redpool.nim(68)          getUserIdIter
asyncfutures.nim(389)    read
asyncfutures.nim(389)    read
asyncfutures.nim(389)    read
asyncfutures.nim(389)    read
asyncfutures.nim(389)    read
Expected { but end reached. At offset: 0
404 Not Found:  --- url: https://api.twitter.com/graphql/gkjsKepM6gl_HmFWoWKfgg/SearchTimeline?variables=%7B%22rawQuery%22%3A%22include%3Anativeretweets+%5C%22%23RoshamboCoin%5C%22%22%2C%22count%22%3A20%2C%22product%22%3A%22Latest%22%2C%22withDownvotePerspective%22%3Afalse%2C%22withReactionsMetadata%22%3Afalse%2C%22withReactionsPerspective%22%3Afalse%7D&features=%7B%22blue_business_profile_image_shape_enabled%22%3Afalse%2C%22creator_subscriptions_tweet_preview_api_enabled%22%3Atrue%2C%22freedom_of_speech_not_reach_fetch_enabled%22%3Afalse%2C%22graphql_is_translatable_rweb_tweet_is_translatable_enabled%22%3Afalse%2C%22highlights_tweets_tab_ui_enabled%22%3Afalse%2C%22interactive_text_enabled%22%3Afalse%2C%22longform_notetweets_consumption_enabled%22%3Atrue%2C%22longform_notetweets_inline_media_enabled%22%3Afalse%2C%22longform_notetweets_richtext_consumption_enabled%22%3Atrue%2C%22longform_notetweets_rich_text_read_enabled%22%3Afalse%2C%22responsive_web_edit_tweet_api_enabled%22%3Afalse%2C%22responsive_web_enhance_cards_enabled%22%3Afalse%2C%22responsive_web_graphql_exclude_directive_enabled%22%3Atrue%2C%22responsive_web_graphql_skip_user_profile_image_extensions_enabled%22%3Afalse%2C%22responsive_web_graphql_timeline_navigation_enabled%22%3Afalse%2C%22responsive_web_text_conversations_enabled%22%3Afalse%2C%22responsive_web_twitter_blue_verified_badge_is_enabled%22%3Atrue%2C%22rweb_lists_timeline_redesign_enabled%22%3Atrue%2C%22spaces_2022_h2_clipping%22%3Atrue%2C%22spaces_2022_h2_spaces_communities%22%3Atrue%2C%22standardized_nudges_misinfo%22%3Afalse%2C%22tweet_awards_web_tipping_enabled%22%3Afalse%2C%22tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled%22%3Afalse%2C%22tweetypie_unmention_optimization_enabled%22%3Afalse%2C%22verified_phone_label_enabled%22%3Afalse%2C%22vibe_api_enabled%22%3Afalse%2C%22view_counts_everywhere_api_enabled%22%3Afalse%7D
eylles commented 1 year ago

This fork is working https://github.com/PrivacyDevel/nitter/

But privacydev.net isn't.

That instance is always pegged from the sheer volume of traffic alone.

tghe-retford commented 1 year ago

thoughts?

"There is nothing more permanent than a temporary measure". Either now or in the future.

KOLANICH commented 1 year ago

https://github.com/miguelfreitas/twister-core https://github.com/szelok/twister-android

It's time to admit: providing an alternative frontend to Twitter was an idea determined to fail. What should have been done, is mirroring the content of Twitter into Twister automatically, this way having more content in twister than in twitter and creating incentives for users to join twister instead of twitter.

bugzillus commented 1 year ago

Nitter.net returns the following "Jester route exception" which seems quite unusual for the twitter gateway not being accessible:

"An error has occured in one of your routes.

Detail: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) getGraphUserNimAsyncContinue /home/ubuntu/nitter/src/api.nim(13) getGraphUserIter /home/ubuntu/nitter/src/experimental/parser/graphql.nim(7) parseGraphUser /home/ubuntu/.nimble/pkgs/jsony-#ea811be/jsony.nim(590) fromJson /home/ubuntu/.nimble/pkgs/jsony-#ea811be/jsony.nim(45) parseHook [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) getCachedUserNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) getCachedUserIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) fetchProfileNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) fetchProfileIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) showTimelineNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) showTimelineIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) matchNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) matchIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) dispatchNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) dispatchIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] [[reraised from: /home/ubuntu/nitter/src/nitter.nim(61) nitter /home/ubuntu/.nimble/pkgs/jester-#baca3f/jester.nim(511) serve /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1956) runForever /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1653) poll /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(1394) runOnce /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncdispatch.nim(234) processPendingCallbacks /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(28) handleRequestSlowNimAsyncContinue /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncmacro.nim(131) handleRequestSlowIter /home/ubuntu/.choosenim/toolchains/nim-1.6.10/lib/pure/asyncfutures.nim(389) read ]] Expected { but end reached. At offset: 0"

Thanks anyway for providing and maintaining Nitter.

HEPOSHEIKKI commented 1 year ago

This is a sad year for social media.

Cheers lads, was a wild ride.

notune commented 1 year ago

Couldn't we use accounts to scrape the data (one per instance)? As far as I know this was already done for NSFW-content so maybe it could be applied to all content now

hyzchip commented 1 year ago

There is one instance that is still functional: https://tweet.whateveritworks.org Partly functional, anyway...individual tweets are displayed, but profiles produce a 502 error.

pozirk commented 1 year ago

Well, big thanks to @zedeus for nitter, have been enjoying it for some time. Hope it can be fixed, but... it was going downhill for some time already. Around a month ago twitter stopped working with disabled cookies, now this.

NovemberOrWhatever commented 1 year ago

Okay, well, to Mastodon I guess. It's a shame they're killing this. I don't think there are many here who will respond to this by going back to regular Twitter. I'm now just done with Twitter for good I suppose. Thanks to everyone who tried their best.

AlyoshaVasilieva commented 1 year ago

Couldn't we use accounts to scrape the data (one per instance)? As far as I know this was already done for NSFW-content so maybe it could be applied to all content now

Almost certainly yes, but 1) this requires registering burner accounts, possibly with some regularity as I suspect they'll get banned, and 2) the accounts will need to be linked to phone numbers because Twitter requires this if your account looks suspicious at all.

I don't think this is all that hard but it adds extra cost on top of running a server and it's annoying.

oelmekki commented 1 year ago

Thanks Nitter devs, you have been heroes of privacy, for a while. :)

I don't think this will affect me much, because I have not been interested in Twitter's content for a while. This network has been slowly and painfully dying since Musk bought it (and even before that, it became mostly a trolling platform for political people to hate each others), so whatever. Most of my social feeds go through Mastodon and Lemmy, nowadays, anyway. This is the end of an era, what comes next is exciting!

nukeop commented 1 year ago

Glad to see all sorts of "social" media dying 😍

stemid commented 1 year ago

Can you scrape the embedded tweet instead?

https://platform.twitter.com/embed/Tweet.html?id=1674865731136020505

soapingtime commented 1 year ago

i don't particularly know how nitter scrapes, but i'm able to see tweets and profiles in my browser by setting the useragent to "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

Trit34 commented 1 year ago

i don't particularly know how nitter scrapes, but i'm able to see tweets and profiles in my browser by setting the useragent to "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

Someone has reported that this trick does not work anymore. Fun fact: it was the same trick that was used to get the pre-Polymer UI back on YouTube, when it was still available.

I don’t know how long this “temporary” measure will last, nor if it will be temporary at all. In the worse scenario, it was a real pleasure to use Nitter, @zedeus ! Let’s stay tuned, but until facts get me wrong, I consider both Nitter and Twitter are dead from now on.

Thank you!

(Now, if you want to do a Nitter clone for Mastodon, to be able to browse it without JS needed, I won’t say no to this)

notune commented 1 year ago

Can you scrape the embedded tweet instead?

https://platform.twitter.com/embed/Tweet.html?id=1674865731136020505

This could definitely work. Problem is that we still have to get the tweets from a specific user.

fREAST commented 1 year ago

Can you scrape the embedded tweet instead? https://platform.twitter.com/embed/Tweet.html?id=1674865731136020505

This could definitely work. Problem is that we still have to get the tweets from a specific user.

Could possibly scrape this for user timeline, although it only has the last couple of tweets. https://syndication.twitter.com/srv/timeline-profile/screen-name/TwitterDev?showReplies=true

ghost commented 1 year ago

note the Android app still works without login, which means the "anonymous flow" is still possible:

https://github.com/4cq2/mech/tree/main/twitter

dvikan commented 1 year ago

im having success scraping the embedded timeline as suggested by @fREAST

https://rss-bridge.org/bridge01/?action=display&bridge=TwitterBridge&context=By+username&u=DailyCaller&format=Html (1 hour cache)

[0] code for the temp fix: https://github.com/dvikan/rss-bridge/commit/c4a82ee3baf832cca6068634cfd1a97b104afeb9

githubtefo commented 1 year ago

thoughts?

a02ae1feb7da5958bf7ae451012fad1ab34a974910511745bdcf80f674b8d452

Is this true? I can't check because I don't have a twitter account hehe

devgaucho commented 1 year ago

thoughts? a02ae1feb7da5958bf7ae451012fad1ab34a974910511745bdcf80f674b8d452

Is this true? I can't check because I don't have a_ twitter _account hehe

true https://platform.twitter.com/embed/Tweet.html?id=1674865731136020505

nukeop commented 1 year ago

You can in fact live without Twitter, you should give it a try

tuxpizza commented 1 year ago

Libreddit gone tomorrow.

Wonder how long Invidious and FreeTube will last?

Libreddit isn't using the Reddit API. it's scraping via public information. Unless Reddit decides to lock you out unless you're logged in, Libreddit will continue to work

micenest commented 1 year ago

You can in fact live without Twitter, you should give it a try

Absolutely! in fact this is what i do daily.

However, there are still certain things that i need to use twitter for in my work, such as inspecting certain tweets from services that i use. Or just watching around friends that did not made the move just yet.

That's not to mention that, for nitter in particular, you can easily use a twitter account as an RSS feed for brands and services that don't have any other ways of communication.

Yes, a life without twitter is possible. Which is what Nitter mostly stands out for. Refraining from using twitter as a main tool and instead as an assistive thing.

orbea commented 1 year ago

You can in fact live without Twitter, you should give it a try

This would be easier if people stopped using twitter to share current news which the MSM is entirely incapable of reporting on accurately.

nukeop commented 1 year ago

You can live without all that stuff too. Stop reading news

micenest commented 1 year ago

Libreddit gone tomorrow. Wonder how long Invidious and FreeTube will last?

Libreddit isn't using the Reddit API. it's scraping via public information. Unless Reddit decides to lock you out unless you're logged in, Libreddit will continue to work

@tuxpizza False. So much, that even the current maintainer is fearful of Libreddit's Future at the moment

orbea commented 1 year ago

You can live without all that stuff too. Stop reading news

"Ignorance is bliss" (If only bad things went away when you didn't know about them)

nukeop commented 1 year ago

You know less when you read the news though

garoto commented 1 year ago

Can you stop with the lecturing? It's asinine.

tuxpizza commented 1 year ago

Libreddit gone tomorrow. Wonder how long Invidious and FreeTube will last?

Libreddit isn't using the Reddit API. it's scraping via public information. Unless Reddit decides to lock you out unless you're logged in, Libreddit will continue to work

@tuxpizza False. So much, that even the current maintainer is fearful of Libreddit's Future at the moment

Ahh I guess I was mistaken. I thought it was similar to Nitter but they are using the API but with an "Anonymous" endpoint. I'm betting on Reddit removing that aswell. Sucks.

thansk commented 1 year ago

You know less when you read the news though

How can I mark this as spam/off-topic? The report button is missing from the three dots.

nukeop commented 1 year ago

How can I mark this as spam/off-topic? The report button is missing from the three dots.

That's because this isn't reddit

cristeigabriel commented 1 year ago

thoughts?

a02ae1feb7da5958bf7ae451012fad1ab34a974910511745bdcf80f674b8d452

IT'S DA SCRAAAAPEEEERZ

unseenlarks commented 1 year ago

The privacydev fork does work, but in an extremely limited manner. only tweet search works, and only if the xCsrfToken and cookieHeader settings are configured. both values are request headers when you're logged into twitter.

using it for multi-account feeds also works* in a limited manner, when not receiving instance limited/bad gateway errors of course. :/

*edit: seems it's no longer the case.

thank you to everyone developing + working on nitter all this time.

warwick-davis commented 1 year ago

why is everyone crying? all you have to do is make an account (and log it into the instance) now

devgaucho commented 1 year ago

why is everyone crying? all you have to do is make an account (and log it into the instance) now

accounts can be deleted and have limited access, which increases the complexity of the code