Ophalen van Twitter berichten via CFFEED

09-05-2011 | Marcel van Langen | ColdFusion | twitter, tweets, cffeed, caching

Er bestaan nogal wat mogelijkheden om Twitter berichten op je website te laten zien. Maar een ontwikkelaar wil natuurlijk zoveel mogelijk vrijheid. Daarom maken we hiervoor niet gebruik van een standaard component, maar gebruiken we de krachtige CFFEED tag. Daarbij is caching essentieel. Dit artikel beschrijft hoe we caching kunnen combineren met CFFEED.

Allereerst maken we een functie aan in een component. De werkwijze is als volgt: we slaan de feed op in de application scope. In de application scope slaan we ook een variabele op die de datum en tijd bevat waarop de feed voor het laatst is geupdate. Door deze te vergelijken met de huidige datum en tijd kunnen we bepalen wanneer het tijd is om CFFEED weer aan het werk te zetten. Eerst maar eens de functie:

<!--- Haal de Twitter feeds van een hashtag op --->
<cffunction name="getTweets" access="public" returntype="void" output="false" hint="Haal de Twitter feeds van een hashtag op">
<cfargument name="hashtag" required="yes" type="string" />
<cfset variables.feedurl="http://search.twitter.com/search.atom?q=from%3A#arguments.hashtag#" />
<cfset variables.cacheMinutesTwitter = 20 />
<!--- Als de cache niet in de application scope zit of de cache expired is --->
<cfif !StructKeyExists(application, "twitterFeeds") OR !StructKeyExists(application, "twitterFeeds_created") OR DateDiff("n", application.twitterFeeds_created, Now()) GT variables.cacheMinutesTwitter>
<cflock scope="application" timeout="60" type="exclusive">
<cfset application.twitterFeeds_created = Now() />
<cffeed source="#variables.feedurl#" properties="feedmeta" query="application.twitterFeeds" />
</cflock>
</cfif>
<cfreturn />
</cffunction>

Laten we de code even doorlopen: we starten de functie met een argument, genaamd hashtag. Dat is je Twitter account zonder het @ teken. Vervolgens zie je twee variabelen: een de volledige URL om de tweets op te halen, en een het aantal minuten dat de feed gecacht moet blijven. In mijn geval is dat 20 minuten.

En dan komen we bij het leuke deel. De code kijkt nu of in de application scope de variabele twitterFeeds (de lijst met tweets) en / of twitterFeeds_created (de datum / tijd van de laatste update) al beschikbaar zijn. En er wordt ook gekeken of er al meer dan 20 minuten zijn verstreken sinds de laatste update. Als aan de voorwaarden is voldaan, wordt een nieuwe lijst met berichten opgehaald en opgeslagen in de variabele FEEDMETA in de application scope. Ook wordt de datum / tijd van de update weer bijgewerkt.

Het resultaat is een efficiente manier om met Twitter berichten om te gaan. En het allerbeste is nog dat de variabele FEEDMETA in de application scope gewoon een query object is. Bovendien is deze bevolkt door allerhande aanvullende informatie over de berichten. Dump het maar eens op het scherm. Om het voorbeeld compleet te maken hier nog even een voorbeeld hoe je met de code om moet gaan. Enne, niet vergeten te locken!

<cfoutput query="application.TwitterFeeds" startrow="1" maxrows="#application.website.web_twitter_aantal#">
<p>#application.TwitterFeeds.content#</p>
<p>#application.cfc_settings.ISOToDateTime(application.TwitterFeeds.publisheddate)#</p>
</cfoutput>

Overigens is de functie ISOToDateTime een erg handige functie om die lastige ISO data om te zetten naar een meer zinvolle datum om te presenteren. Maar daarover in een andere post meer.

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS