selbstgehostetes twitter-RSS mit der twitter API 1.1

felix schwenzel

vor ein paar ta­gen ver­öf­fent­lich­te gabe wea­ther­head ei­nen ar­ti­kel mit dem ti­tel „Tweet­Fee­der Script: From Twit­ter to RSS“. gabe wea­ther­head hat sich ein script ge­bas­telt das ein paar twit­ter ac­counts spo­ra­disch nach links die kei­ne bil­der sind über­prüft und die­se links dann in ei­nes sei­ner pin­board-ac­counts schreibt. der ar­ti­kel hät­te also ge­nau­er „From Twit­ter to Pin­board“ heis­sen müs­sen.

ges­tern book­mark­te sa­scha lobo den (neu­en?) dienst twit­ter-rss.com, der ge­nau das tut was er im do­main­na­men an­kün­digt: er macht be­lie­bi­ge twit­ter-kon­ten per RSS abon­nier­bar.

in den letz­ten mo­na­ten habe ich mich auch im­mer wie­der mit dem th­mea twit­ter und RSS be­schäf­tigt, was dar­an liegt, dass twit­ter sich zu mei­nem be­dau­ern mehr und mehr ein­igelt und ab­schot­tet. im sep­tem­ber wur­den die mög­lich­kei­ten per ifttt da­ten aus twit­ter raus­zu­ho­len von twit­ter emp­find­lich ein­ge­schränkt und seit die­sem früh­jahr ar­bei­tet twit­ter dar­an die re­la­tiv of­fe­ne API der ver­si­on 1.0 mit der ver­si­on 1.1 zu er­set­zen, die für jede klei­nig­keit au­then­ti­fi­zie­rung be­nö­tigt und die eh noch ver­steckt vor­han­de­nen twit­ter-RSS-feeds be­sei­tigt.

RSS ist und bleibt mein fa­vo­ri­sier­ter weg da­ten zu ver­ar­bei­ten, sei es mei­ne rück­sei­te zu be­stü­cken, mei­ne mo­nat­li­chen twit­ter-fa­vo­ri­ten-lis­ten au­to­ma­tisch zu er­zeu­gen oder per RSS-rea­der den über­blick zu be­hal­ten. des­halb habe ich mir mei­nen ei­ge­nen php-ba­sier­ten twit­ter-zu-RSS-über­set­zer, bzw. pro­xy ge­baut.

ein ei­ge­ner, selbst­ge­scrip­te­ter und selbst­ge­hos­te­ter über­set­zer hat ein paar vor­tei­le ge­gen­über lö­sun­gen wie twit­ter-rss.com:

  • ich ma­che mich nicht von ei­nem wei­te­ren dritt­an­bie­ter ab­hän­gig
  • ich kann be­stim­men wie die aus­ga­be aus­sieht oder for­ma­tiert ist
  • ich kann al­les selbst steu­ern und er­wei­tern

der bes­te teil ist na­tür­lich: wenn vie­le die­ses oder an­de­re scrip­te nut­zen um twit­ter-strö­me aus­zu­le­sen, kann twit­ter nicht ein­fach die schot­ten dicht ma­chen, wie bei ifttt. ifttt ein paar be­rech­ti­gun­gen zu ent­zie­hen ist ein­fach, den selbst­ge­hos­te­ten scrip­ten oder web­ap­ps von hun­der­ten oder tau­sen­den nut­zern rech­te zu ent­zie­hen ist schon sehr viel schwe­rer.


mit mei­nem script lese ich den twit­ter-strom mei­nes ei­ge­nen ac­counts aus. tech­nisch pas­siert nichts auf­re­gen­des:

  • ich au­then­ti­fi­zie­re mich mit mei­ner ei­gens de­fi­nier­ten twit­ter-app, bzw. de­ren schlüs­seln
  • twit­ter lie­fert mir json-co­diert die letz­ten 20 mei­ner tweets, ex­klu­si­ve ret­weets
  • aus der json-ant­wort baue ich mir mei­nen RSS-feed zu­sam­men und gebe ihn aus

wenn ich die an­fra­ge et­was an­pas­se kann ich auf die­se art und wei­se bei­spiels­wei­se auch mei­ne twit­ter-fa­vo­ri­ten aus­le­sen und als RSS aus­ge­ben:

mit ei­ner twit­ter-such-an­fra­ge soll­te das ähn­lich klap­pen, das habe ich aber noch nicht aus­pro­biert.

als gröss­ten vor­teil sehe ich, dass ich die RSS-aus­ga­be selbst steu­ern und for­ma­tie­ren kann. das script wan­delt be­spiels­wei­se die ver­kack­ten t.co-links die die twit­ter-api zu­rück­lie­fert in klar­text-adres­sen um, hash­tags in such­links und twit­ter-na­men in pro­fil­links. der ti­tel ei­nes RSS-items lie­fert den ro­hen voll­text ei­nes tweets, die de­scrip­ti­on des RSS-items lie­fert hin­ge­gen das of­fi­zi­el­le em­bed-for­mat ei­nes tweets zu­rück, also nach die­sem sche­ma:

das aus­ga­be­for­mat lässt sich bei be­darf na­tür­lich leicht an­pas­sen. in ei­nem tweet ein­ge­bet­te­te bil­der bet­te ich per HTML in die tweet-de­scrip­ti­on ein. das ist nicht be­son­ders schön, aber ef­fek­tiv (demo):


für die twit­ter-kom­mu­ni­ka­ti­on und die RSS-ge­ne­rie­rung nut­ze ich zwei php-klas­sen. ei­ner­seits die OAuth 1.0A li­bra­ry von @the­mat­thar­ris und den Uni­ver­sal Feed Ge­ne­ra­tor von anis ud­din ah­mad. das gan­ze pa­ket lässt sich hier run­ter­la­den, hier eine de­mo­aus­ga­be mei­ner tweets.


das al­les ist na­tür­lich lan­ge nicht per­fekt. der uni­ver­sal feed ge­ne­ra­tor ge­ne­riert der­zeit bei­spiels­wei­se kei­ne mehr­fa­chen RSS-ka­te­go­rien, so dass bei meh­re­ren hash­tags ei­nes tweets im­mer nur der letz­te als RSS-ka­te­go­rie im RSS-feed lan­det. ich hof­fe das die­ser feed-ge­ne­ra­tor das künf­tig bes­ser er­le­digt. caching wäre ir­gend­wann auch kei­ne schlech­te idee, um die twit­ter API nicht über ge­bühr zu stra­pa­zie­ren. eine zen­tra­le kon­fi­gu­ra­ti­on und eine fle­xi­bi­li­sie­rung, so dass ich mir alle mög­li­chen feeds mit dem script er­zeu­gen kann, nicht nur twit­ter-fa­vo­ri­ten und die ei­ge­nen tweets.