ubuntuusers.de

Bash script zum Folgen von Twitter

Status: Ungelöst | Ubuntu-Version: Xubuntu 12.04 (Precise Pangolin)
Antworten |

Valnar

Anmeldungsdatum:
29. April 2010

Beiträge: 46

Hiho liebe Usergemeinde, ich hab mir heute mal überlegt, dass ich gerne einigen Leuten auf Twitter folgen möchte, allerdings habe ich keine Lust mir da nen Account zu holen.

Nun habe ich geschaut und festgstellt, dass Twitter wohl mal nen RSS Feed hatte, der aber abgeschafft wurde.

Außerdem gibt es zwar angeblich über http://www.twitter-rss.com/ einen ähnlichen Dienst, der hat aber bei meinen tests absolut versagt wegen ständiger bugs und langsamer updates (wer will schon 30+ Minuten später von nem tweet erfahren, erst recht wenn es um zeitkritische Nachrichten geht O_o)

Also muss eine Lösung her, und ich hab mir überlegt das ganze in nem recht simplen Bash script selber zu machen. Das ganze funktioniert wenn überhaupt natürlich nur mit öffentlichen Kanälen. Im Grunde genommen wird über wget die Twitter Seite des Users gegriffen, über grep der aktuellste tweet rausgesucht, dessen Inhalt mit w3m geparst und das Ergebnis über notify-send angezeigt wenn es was neues ist:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# bash script to check twitter for new tweets made by user specified in $1

#parse username to Twitter URL:

turl="http://www.twitter.com/$1"

#grab Twitter page, take the most recent tweet and parse it using w3m:

newtweet="$((wget -qO- $turl)| grep -m 1 'js-tweet-text'|w3m -dump -T text/html)"

#check for existing previous tweet and compare it to newtweet:

checkfile=$HOME/.tweetfollower/lasttweets/$1

if [ -e checkfile ]
then
	if [ "$checkfile" != "$newtweet" ]
	then
		notify-send "$1" "$newtweet" -t 10000
		echo "$newtweet">"$checkfile"
	fi
else
	notify-send "$1" "$newtweet" -t 10000
	echo "$newtweet">"$checkfile"
fi

Leider ist das script derzeit noch nicht wirklich funktionsfähig, ich bin mir nicht so sicher ob der vergleich des aktuell gegriffenen tweets mit dem zuvor gespeicherten nicht besser zu lösen ist, bisher geht er anscheinend noch gar nicht.

Würde mich über ein wenig Hilfe freuen weil ich momentan echt aufm Schlauch stehe.

Wenn das häßliche Entlein hier funktioniert wäre es außerdem schön, wenn wir vielleicht nen script rausbekommen, dass nicht von w3m und notify-send abhängt und auf möglichst vielen Plattformen funktioniert, damit auch andere daran Teil haben können falls Interesse dran besteht.

Bisher war mein Plan zudem, nen 2. script zu schreiben was Zeilenweise eine vom Nutzer erstellte Liste mit Twitter Namen ausliest und für jeden das obige script ausführt. Jenes 2. script könnte man dann bequem über cron regelmäßig ausführen lassen.

Und für die internationalen Gäste, die diesen Thread vielleicht in Zukunft finden:

Notifications in English:

The above script is meant to provide a sollution for people who want to follow public Twitter channels without having to register for a Twitter account. It currently is a work in progress and doesn't work yet, so I won't go into specifics concerning it's functionality, as those are liable to change as the script progresses. Most of it is explained in the script's comments anyway, so read those if you want to know more.

As soon as this works properly, I'll change this notification accordingly.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Als erstes solltest Du mal alle Variablen auf $kleinschreibung umstellen, damit Du nicht aus Versehen eine Systemvariable kaputt schreibst. (die sind nämlich immer $GROSS !)

Dann lass unbedingt das eval weg, das schafft nur Sicherheitsprobleme ! - das geht ziemlich sicher auch direkt,
und vor allem musst Du auch korrekt "quoten" - sonst hast Du allein schon deshalb verloren.

Für einen richtigen Test habe ich im Moment nicht die Zeit, aber Du solltest auf jeden Fall Dein Skript Schritt für Schritt aufbauen, und nicht so als "Klotz".
Dann siehst Du schnell, wo es hakt.

LG,

track

Valnar

(Themenstarter)

Anmeldungsdatum:
29. April 2010

Beiträge: 46

k, hab grad auch nochmal ein paar Fehler gefunden die sich zu schnelles rumgehacke ergeben haben, ich editier den Spaß nochmal und sag Bescheid wenn es so weit ist...

Valnar

(Themenstarter)

Anmeldungsdatum:
29. April 2010

Beiträge: 46

Okay, ist soweit erstmal korrigiert, Problem ist halt weiterhin, dass ich nicht weiß wie ich am besten den alten gespeicherten tweet mit dem aktuellen vergleichen soll.

Valnar

(Themenstarter)

Anmeldungsdatum:
29. April 2010

Beiträge: 46

Lol, ich bin ein Idiot xD Habs hinbekommen, funktionierende Version ist im ersten Beitrag zu finden...

...oder auch nicht, weil ich gerade die Bearbeiten Funktion nicht für meinen Beitrag nutzen kann O_o

Also, hier ist das momentan funktionsfähige script, wenn das vielleicht ein Mod in den ersten Beitrag setzen könnte...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# bash script to check twitter for new tweets made by user specified in $1

#parse username to Twitter URL:

turl="http://www.twitter.com/$1"

#grab Twitter page, take the most recent tweet and parse it using w3m:

newtweet="$((wget -qO- $turl)| grep -m 1 'js-tweet-text'|w3m -dump -T text/html)"

#check for existing previous tweet and compare it to newtweet:

checkfile=$HOME/.tweetfollower/lasttweets/$1

if [ -e $checkfile ]
then
	if [ "$(cat $checkfile)" != "$newtweet" ]
	then
		notify-send "$1" "$newtweet" -t 10000
		echo "$newtweet">"$checkfile"
	fi
else
	notify-send "$1" "$newtweet" -t 10000
	echo "$newtweet">"$checkfile"
fi

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

☺ Prima !

Eine Kleinigkeit noch: in Zeile 14 und 16 hast Du das "quoten" vergessen. Das merkt man zwar erst, wenn man einen Dateinamen mit Leerzeichen als Argument übergibt, aber dann macht es sehr wohl Ärger. Das solltest Du also noch korrigieren.

LG,

track

Valnar

(Themenstarter)

Anmeldungsdatum:
29. April 2010

Beiträge: 46

Juti, danke dir, hab ich gemacht.

Jetzt hab ich nen netten ".tweetfollower" Ordner bei mir im Home liegen, da drin nen Ordner "lasttweets" wo die letzten tweets gespeichert werden, eine Datei followlist.txt wo zeilenweise die zu folgenden Twitter Namen drin stehen und die scripte "tweet-checker.sh" und "tweet-follower.sh", mit folgendem Inhalt:

"tweet-checker.sh":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# bash script to check twitter for new tweets made by user specified in $1

#parse username to Twitter URL:

turl="http://www.twitter.com/$1"

#grab Twitter page, take the most recent tweet and parse it using w3m:

newtweet="$((wget -qO- $turl)| grep -m 1 'js-tweet-text'|w3m -dump -T text/html)"

#check for existing previous tweet and compare it to newtweet:

checkfile="$HOME/.tweetfollower/lasttweets/$1"

if [ -e "$checkfile" ]
then
	if [ "$(cat $checkfile)" != "$newtweet" ]
	then
		notify-send "$1" "$newtweet" -t 10000
		echo "$newtweet">"$checkfile"
	fi
else
	notify-send "$1" "$newtweet" -t 10000
	echo "$newtweet">"$checkfile"
fi

"tweet-follower.sh":

1
2
3
4
5
6
7
#!/bin/bash
#shell script to check for new tweets by twitter channels specified in followlist.txt using tweet-check.sh

while read line
do
	./tweet-checker.sh "$line" &
done <followlist.txt

Das ganze funktioniert soweit wirklich gut und kann von mir erstmal verwendet werden denke ich, allerdings würde ich gerne dafür sorgen, dass auch andere es nach möglichkeit gut für sich können. Vorschläge?

Außerdem hätte ich gerne noch ne Art exception handling für den Fall, dass mal ein Befehl nicht so toll funktioniert, also werd ich da wohl wirklich noch ein wenig dran rumpflücken bis ich zufrieden damit bin.

Achso, es wäre übrigens toll, wenn ich demnächst meinen ersten Beitrag ganz normal editieren kann, um am Ende die hoffentlich ordentliche und vollständige Lösung gleich da drin zu haben, für die Nachwelt xD

unbuntuS12

Anmeldungsdatum:
2. Juni 2010

Beiträge: 1816

Hallo,

nur der Vollständigkeit halber

Valnar schrieb:

Nun habe ich geschaut und festgstellt, dass Twitter wohl mal nen RSS Feed hatte, der aber abgeschafft wurde.

Mit

1
http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=$user_name_des_twitter_accounts

komme ich weiterhin an Tweets.

Dennoch: Schöne Idee!

Valnar

(Themenstarter)

Anmeldungsdatum:
29. April 2010

Beiträge: 46

...lol, danke für den Hinweis. Da hätte ich mir ja einiges an Aufwand sparen können xD

...wobei es sich bestimmt anbietet, das ganze für das script zu nutzen statt der normalen twitter seite. das ganze lässt sich so wie es aussieht auch sehr viel leichter ohne w3m für menschen lesbar machen und man muss nur ca. ein zehntel der datenmenge runterladen...ich bin dann mal weiterbasteln xD

Antworten |