De titel van deze blogpost zal je waarschijnlijk niet veel zeggen, maar om het simpel uit te leggen komt het er op neer dat ik vanuit mijn iPhone app (Tweetbot) afbeeldingen wou uploaden naar Flickr. Standaard zijn er diensten zoals Twitpic, Mobypicture, Lockerz, etc in voorzien, maar deze blijven steeds toch altijd en stukje minder overzichtelijk dan Flickr. Een gemiste kans van de vele Twitter-apps.

Tweetbot en nog enkele apps bieden een Custom API Endpoint aan. Dit is niet meer dan een url waarheen je foto gepost wordt bij het plaatsen van je tweet zodat zelf de hosting kan afhandelen.

Nu gebruikte ik voorheen steeds gdzl.la, een dienste die je Twitter-foto’s verstuurd naar Flickr, maar bleef me storen aan de weinig mogelijkheden voor het indelen van je foto’s. Ook komt er steeds een gdzl.la boodschap onderaan de foto’s die niet zo netjes is. Dat gdzl.la onder elke foto nog wat reclame maakt voor zichzelf, kan ik nog mee leven. Maar de grootste ergernis bleef dat er totaal geen enkele Exif data (voorbeeld Exif-data) doorgegeven wordt aan Flickr. Zo ontbreekt bijvoorbeeld je locatie op Flickr waar de foto genomen is of welk toestel je gebruikt hebt om de foto te maken. Een gemiste kans van gdzl.la dus. (dacht ik…)

Wat snel opzoekingswerk leerde me dat de Twitter app gewoon een $_POST doet naar de url die je opgeeft. In de headers kan je Twitter OAuth headers terugvinden zodat je kan weten welke Twitter user jouw url juist oproep. Dit controleren is snel gedaan als je de Twitter-library even gebruikt. De $_POST zelf bevat 3 parameters:

  • message : Uw twitter-bericht
  • source : De client-naam, in mijn geval ‘Tweetbot for iPhone’
  • media : De foto of video die je mee opgeslagen hebt bij de tweet. Dit steeds onder de bestandsnaam image.jpg of video.mp4.

Na wat spelen plaatste ik de foto eerst even op mijn eigen hosting-pakket, zo kregen we de API al snel aan het werken. Het enige wat je moet doen wanneer je de foto hebt opgeslagen is de url naar de foto terugsturen. Dit doe je door gewoon even een XML-element met de naam mediaurl als result te tonen op je API-url.

<mediaurl>http://domain.com/uploads/D123.jpg</mediaurl>

Nu rest ons enkel nog de foto te uploaden naar Flickr, want dat was ons uiteindelijke doel. De foto zelf uploaden is 3x niets van zodra je over je API-key, API-Secret en API-token beschikt. Deze verkrijgen is zoals steeds bij Flickr een ander paar mouwen. Het heel authenticatie-proces zal ik snel even in 6-stappen uit de doeken doen:

  1. Maak een Flickr app aan.
  2. Vul je verkregen ApiKey en ApiSecret in op de auth.php en getToken.php bestanden.
  3. Bij de Flickr app geef je als callback url je http://domain.com/auth.php link op.
  4. Surf naar de getToken.php pagina
  5. Je wordt geredirect naar Flickr en moet daar toestemming geven.
  6. Je komt uiteindelijk terug op de getToken.php pagina uit waar je ineens je token te zien krijgt.

Terug bij het verhaal, we kregen onze foto vanuit de Twitter-app perfect op Flickr en ik dacht missie geslaagd!

Helaas kreeg ik nog steeds geen Exif data bij mijn foto. Geen locatie, geen camera-gegevens, niets… Wat blijkt achteraf, na wat meer opzoekingswerk, dat de meeste Twitter-apps gewoon al die data uit de foto strippen als ze de foto verkleinen en doorsturen naar de API.

Bij deze zitten we dus met een systeem dat perfect onze foto’s vanuit de Twitter-app op Flickr kan posten, maar het is toch niet het resultaat dat ik wenste.

Wil je zelf aan de slag met mijn late-night-code? Dan kan je die hier downloaden: https://github.com/tomclaus/Twupload
(Neen, het is geen PHP-class, maar snel in elkaar gestoken regels PHP om het één en ander te testen, daarop wil ik dan ook geen commentaar. Als je structureel wel iets grootst ziet dat zeker verbeterd kan worden, mag je dat laten weten.)

We blijven niet met de pakken zitten… het vervolg…

Wat nu?! Vandaag haalde ik even mijn probleem aan bij mijn collega’s op Inventis en daar zagen ze op het eerste zicht ook niet dadelijk een oplossing voor mijn huidige probleem. Toch kwam ik samen met Dirk via een omweg aan een eventuele oplossing voor de foto-locatie op de Flickr foto te krijgen: Doordat moderne Twitter-apps je locatie in de tweet vermelden, kunnen we achteraf van zodra de tweet live staat hieruit de locatie ophalen en aanpassen op onze Flickr foto. We komen dan tot de volgende flow:

  1. Tweet opstellen met je foto
  2. Custom API Endpoint zet foto op Flickr (eigen API of gdzl.la gebruiken)
  3. Tweet komt op Twitter met locatie bij je tweet
  4. Opvangen wanneer er een nieuwe tweet geplaatst is met een Flickr link erin.
  5. Locatie opvragen uit tweet.
  6. Locatie toevoegen aan de Flickr foto.
  7. Done!

Het bovenstaande is nog maar een concept zonder iets of wat uit te zoeken, maar van zodra we nog eens een avondje tijd vinden ga ik toch eens zien hoe dit in de praktijk kan lopen. Ik hou jullie op de hoogte!

BTW: volgens mij is het Tweetbot-logo een verborgen versie van onze Pingu vriend in vooraanzicht. 😉