månadsarkiv: oktober 2012

Ju fler kockar – ett hopkok av APIer som driver What’s Cooking Wednesday

Efter SSWC 2011 tog mästerkocken Rikard Nilsson kontakt med mig om en idé han hade om att dela recept via Twitter. Jag tyckte det lät spännande så jag hakade på, och så byggde vi sajten What’s Cooking Wednesday. Rickard berättar lite om projektet i filmen från SSWC 2012.

Det hela går ut på att vem som helst kan dela matrecept genom att skicka en länk till sitt recept i en tweet och ange hashtaggen #wcwed. Receptet kan vara publicerat exempelvis på en egen blogg. Det som händer då är att vår sajt plockar upp matreceptet och lägger in det på WCW-sajten i ett snyggt och enhetligt utseende. Alltihop sker helt automatiskt förutom att inläggen godkänns manuellt. Varje onsdag kl 13 publiceras de recept som kommit in under den gångna veckan. Tanken med detta är att fungera som en motsvarighet till Follow Friday på Twitter, att på en bestämd dag kunna ta del av matlagningstips. 

Wcwed-symbol

Så hur fungerar What’s Cooking Wednesday? 

Det är uppbyggt som en mashup som använder ett antal olika APIer. API är som gjort för att snickra ihop ett hopkok. Ap-enkelt Interface helt enkelt, för att citera @tomaswennstrom

Till att börja med Twitter Search API för att bevaka hashtaggen #wcwed. Vi söker varje minut fram de 30 senaste tweeten med denna hashtag och som innehåller en länk. Sökresultatet kollas mot en databas för att se om det är någon ny tweet som vi inte sett förut, och i så fall plockar vi ut första länken från tweettexten med ett regular expression. Vi kollar också så att det inte är fråga om en retweet. 

Länken skickas vidare till nästa API som är Diffbot, en tjänst som utför innehållsextrahering från webbsidor, med andra ord plockar ut själva textinnehållet, bilder, sidans verkliga URL efter eventuella länkförkortare och annat. Detta är en inte helt enkel uppgift eftersom det historiskt inte funnits någon enhetlig standard för strukturerat innehåll på webbsidor, i synnerhet som det är många webbsidor där ute som verkligen inte är välstrukturerade i html-koden. Det är såklart idealiskt att inte behöva bekymra sig om detta och uppfinna det hjulet igen utan istället använda en färdig tjänst för det. 

Nästa steg är att kolla att sidans verkliga URL (som vi bland annat fick från Diffbot) är en länk till ett inlägg (djuplänk) och inte till någon bloggs startsida, och så kollar vi att det inte är en länk till oss själva så det inte blir rundgång. Sedan kollar vi URL mot vår databas för att se så det inte är en sida vi redan har publicerat. 

Därefter skickar vi sidans URL till Embedly som också är en tjänst för att extrahera innehåll från en sida, men den är mer inriktad på media. Om Embedly hittar en vettig bildlänk eller videolänk använder vi den istället för Diffbots länk då det visat sig att Embedly ofta är bättre på detta. Diffbots bild använder vi som reserv. 

Efter detta skickar vi sidans text till Google Translate API för att identifiera vilket språk sidan är skriven på. Detta använder vi för att tagga inlägget med språk. Google Translate API är tyvärr inte gratis att använda längre men det är inga stora pengar för den här volymen när det bara handlar om att identifiera språk. 

Nu har vi allt vi behöver. Innehåll, medialänk, en tagg för språket. Vad mer? Jo vi kör texten genom en matchning mot en lista med taggar för att tagga upp inlägget. Står det lax i receptet så blir det taggat med lax och fisk. Står det kyckling så blir det taggat med det. En mycket grundläggande men ändå värdefull taggningsmekanism. Vi hade även kunnat lägga med eventuella hashtaggar från den ursprungliga tweeten men det har hittills inte sett till ut att ge tillräckligt relevanta taggar. 

Sedan ska vårt inlägg postasWordPressajten What’s Cooking Wednesday. Det gör vi via email för enkelhetens skull. Det går att göra på andra sätt också med XML-RPC, men maillösningen är betydligt enklare i synnerhet när bildbilagor är inblandade. Inlägget komponeras alltså i ett mail, taggarna kodas in i mailtexten tillsammans med önskad publiceringstidpunkt angiven som antal minuter fram i tiden från nu. Inläggstexten delas upp på lämpligt ställe (i första hand vid slut på stycke, i andra hand vid slut på mening) och koden för en ”Läs mer”-länk sätts in mellan textdelarna. Bildbilagor hämtas via http och läggs som bilaga till mailet och videolänkar läggs till som enkla länkar i texten.

Därefter mailas inlägget till WordPressajten där tillägget Postie tar hand om inlägget, lägger in bilderna i inlägget, gör om taggarna till WordPresstaggar och sparar inlägget som utkast för manuel granskning. Videolänkar görs om till embeds när inlägget visas i WordPress genom Embedlys WordPress-plugin. En notifiering mailas också till administratörerna. 

När inlägget skickats iväg till WordPressajten skickas en svarstweet till avsändaren med tack för länken. Detta skickas genom Supertweet som har ett enkelt API identiskt med Twitters gamla API för att skicka tweets utan att behöva krångla med att använda OAuth för att gå genom Twitters egna API. Om det var en länk som vi redan hade eller om länken inte var en djuplänk får avsändaren reda på det genom en svarstweet. Samtidigt sparas statusen för den behandlade tweeten tillsammans med URL och annan information ner i vår databas så vi vet vad vi har gjort. 

När recepten publiceras på onsdagen skickas länk för respektive recept till twitterkontot @wcwflip med hjälp av pluginen leenk.me. Det blir en finfin upplevelse att bläddra bland recepten i Flipboard

 

Från blogg via twitter till What’s Cooking Wednesday och vidare till Flipoard med hjälp av ett antal flitiga APIer som rörs ihop till en delikat mashup.