Jak odzyskać tweety z wiersza poleceń?

11

Czy istnieje prosty sposób na odzyskanie czyichś tweetów z wiersza poleceń?

Konto będzie publiczne, a polecenie - lub skrypt, jeśli to konieczne - pobierze wszystkie lub określoną liczbę najnowszych tweetów do pliku tekstowego, jeden tweet na linię, bez metadanych, najnowsze w pierwszym wierszu.

Bez użycia API, tylko bash.

Strapakowsky
źródło
korzystaj z API Pythona, łatwego i słodkiego
BigSack
nie tak, jak wolałbym, ale z ciekawości, który interfejs API Pythona, dowolny link, czy jest w repozytoriach?
Strapakowsky
1
Istnieje opakowanie API python-twitter.
jokerdino

Odpowiedzi:

7

Od najbliższej daty Twitter nie wpuści Cię do swojego interfejsu API bez klucza OAuth. Ale jako obejście można użyć interfejsu API wyszukiwania. Jest RESTful, więc możesz użyć, curlaby pobrać wyniki wyszukiwania w formacie JSON. Na przykład, jeśli chcesz pobrać tweety @ java i zapisać je w pliku ~/.tweets, można użyć następującego wiersza kodu:

curl http://search.twitter.com/search.json?q=from:java&page=1&rpp=10&callback=? >> $HOME/.tweets

Plik można przeanalizować za pomocą dowolnego analizatora składni JSON.


rppParametrem jest liczba af tweets być wyszukiwane. callbackjest funkcją javascript do wykonania na wynikowym JSON. Jeśli nie używasz JavaScript w interfejsie API, możesz go zostawić ?, ale go nie usuwaj. Spowoduję błąd. Więcej wskazówek na temat interfejsu API wyszukiwania można znaleźć na https://dev.twitter.com/docs/api/1/get/search

Istnieją narzędzia do parsowania JSON z interfejsu wiersza poleceń. Chociaż nigdy go nie użyłem, zamieściłem linki do niektórych zasobów, aby pomóc Ci znaleźć najlepiej dopasowane narzędzie:

Krótko mówiąc, szybsze jest użycie jakiegoś Pythona lub Ruby (lub innych).

andrew.46
źródło
Wygląda dobrze, dziękuję @g_kaya. Jak mogę określić na przykład wszystkie tweety, maksymalną dozwoloną liczbę lub 400 tweetów? Jakie są opcje oddzwaniania i rpp? Czy możesz polecić parser JSON z wiersza poleceń?
Strapakowsky
Zredagowałem swoją odpowiedź zgodnie z Twoimi pytaniami. Mam nadzieję, że to pomoże :)
Cieszę się, jeśli są przydatne, nie ma za co :)
Już nie działa
Dean Meehan,
1
"Błędy": [{ "message":.. "THE REST API Twittera v1 nie jest już aktywny Proszę migrować do API v1.1 dev.twitter.com/docs/api/1.1/... }]}
kawalkada
5

Jeśli nie chcesz korzystać z interfejsu API Twittera, możesz pobrać kanał RSS profilu Twittera za pomocą skryptu bash, a następnie sformatować go.

Ponieważ interfejs API Twittera zastąpił kanał RSS, możesz obejść ten problem, generując kanał RSS za pomocą wyników wyszukiwania.

Oto kanał RSS moich tweetów .


Będziesz jednak musiał przygotować niezbędny skrypt bash. Od pobierania kanału RSS do formatowania tweetów zgodnie z własnymi wymaganiami.

jokerdino
źródło
Dzięki @jokerdino. Nie mam nic przeciwko sformatowaniu pliku, jeśli mam dostęp do surowego pliku. Jak pytam tutaj ( webapps.stackexchange.com/questions/34066/… ), kiedyś był plik XML ze wszystkimi tweetami, ale już nie. Kanał rss ma ograniczony zakres czasu i nie mogłem znaleźć sposobu na pobranie wszystkich Twoich tweetów z przesłanego linku. Możesz pomóc?
Strapakowsky
1
Najwyraźniej możesz uzyskać dostęp tylko do tweetów w wieku do 9 dni. Wszystko, co jest starsze, nie jest dostępne przez wyszukiwanie, a nawet przez interfejs API.
jokerdino
Czy na pewno nie ma sposobu, aby uzyskać tweety starsze niż 9 dni? Otworzyłem pytanie tutaj: webapps.stackexchange.com/questions/34070/…
Strapakowsky
Przejście bezpośrednio do strony użytkownika umożliwia ciągłe przewijanie w dół, dzięki czemu javascript ładuje następną stronę bez ograniczeń. Czy byłoby to przydatne do pobrania wszystkich tweetów?
Strapakowsky,
Ten link mówi, że nie można pobrać więcej niż tygodniowych tweetów za pomocą interfejsu API wyszukiwania. Nie jestem pewien, czy pobierać tweety za pomocą JavaScript. Z tego, co wiem, z osi czasu nie można odczytać więcej niż około 3000 tweetów.
jokerdino
2

To jest mój skrypt stworzony do użycia wygaszacza ekranu

#!/bin/bash

user="$1"
user="${user:=pontifex_pl}"

last_status_url=$(lynx -dump https://twitter.com/$user \
    | grep -i "$user/status/" \
    | head -1 \
    | awk '{print $2}')

lynx -dump "$last_status_url" \
    | grep 'Twitter:' -m1 -A4 \
    | tr -d '\n' \
    | sed -e 's/[^"]*"//' -e 's/".*//' \
    | tr -s ' '

echo
tworec
źródło
1

Zrobiłem narzędzie, które powinno robić prawie dokładnie to, co opisałeś: zgarnianie ekranu twitter . Domyślnie będzie on generowany w JSON, z metadanymi, ale trywialne jest przepuszczanie danych wyjściowych przez coś takiego jak podkreślenie-cli, aby usunąć wszystko, czego nie chcesz.

$ twitter-screen-scrape -u slang800 | underscore pluck text --outfmt text > outputfile
gwara
źródło
1

Możesz przejść trasę python + tweepy przez:

  1. Tworzenie własnej aplikacji na Twitterze (Aby uzyskać klucze API)
  2. Utwórz tokeny dostępu dla swojego konta na Twitterze
  3. Użyj takiego skryptu wraz z poświadczeniami: https://gist.github.com/yanofsky/5436496

Właśnie to przetestowałem i działa świetnie. Są jednak użytkownicy, którzy chronią swoje tweety, więc może nie pozwolić ci pobrać wszystkiego. Ale to cecha Twittera.

Limit nadal wynosi 3200, a otrzymasz plik CSV.

Andrei
źródło
1

Możesz twarcpodać przykład, jeśli chcesz zarchiwizować tweety Nassima Nicholasa Taleba, których używasz.

twarc timeline nntaleb --format csv> taleb.csv 

Możesz także użyć innych formatów: --format {json,csv,csv-excel}

Jak skonfigurować twarc: Jedynym sposobem na uzyskanie kompletnych tweetów jest użycie APIniestety, nawet jeśli aplikacja jest przezroczysta, musisz mieć wstępną konfigurację i konfigurację, musisz również złożyć wniosek o API(

Od lipca 2018 r. Musisz złożyć wniosek o konto programisty Twitter i uzyskać zgodę, aby móc tworzyć nowe aplikacje.

)

Po uzyskaniu kluczy aplikacji możesz powiedzieć, twarcjakie są, za pomocą polecenia configure.

twarc configure

Spowoduje to zapisanie poświadczeń w pliku o nazwie .twarcw katalogu domowym użytkownika, dzięki czemu nie trzeba zachować wprowadzając je. Jeśli wolisz dostarczamy je bezpośrednio można je ustawić w środowisku ( CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) lub przy użyciu opcji wiersza poleceń ( --consumer_key, --consumer_secret, --access_token, --access_token_secret).

Eduard Florinescu
źródło