PDA

Volledige versie bekijken : Flickr API Flashscriptje


tha beaver
%Europe/Berlin %004 %2008, 00:06
Flashers,

Ik heb onderstaande scriptje om mijn foto's uit flickr in flash weer te geven.

Nu werkt dit lokaal PRIMA alles werkt exact zoals designed (9 thumbnails worden getoond). De fla file die ik gebruik is 100% leeg verder dus je kan dit gewoon op frame 1 van een lege fla zetten en lokaal testen om te zien wat er zou moeten gebeuren.

Echter na uploaden van het script worden de foto's niet geladen.

zie www.lowkey.nl/test.swf
Mijn php script op www.lowkey.nl/flickr.php werkt uiteraard wel.

Iemand enig idee?

var offset = 105;
var thumbs;
var x = 20;
var y = 30;
var rotationarray:Array = new Array(-60, -45, -30, 30, 45, 60);
trace(rotationarray);

//listener for the loaded Thumbs
var loadListener = new Object();
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);

//action that starts on every loaded thumb
loadListener.onLoadInit = function(target1_mc:MovieClip) {
target1_mc._alpha = 0;
var w1:Number = target1_mc._width;
var h1:Number = target1_mc._height;
target1_mc.onEnterFrame = function() {
if (target1_mc._alpha<100) {
target1_mc._alpha = target1_mc._alpha+2;
} else {
delete target1_mc.onEnterFrame;
target1_mc._alpha = 100;
}
};
target1_mc.lineStyle(2,0xF40BC6);
target1_mc.moveTo(-1,-1);
target1_mc.lineTo(w1+1,-1);
target1_mc.lineTo(w1+1,h1+1);
target1_mc.lineTo(-1,h1+1);
target1_mc.lineTo(-1,-1);
rotationindex = Math.round(Math.random(1)*6);

target1_mc._rotation = rotationarray[rotationindex];
};

//create a new XML object and load XML in to flash
var flickrXML:XML = new XML();
flickrXML.ignoreWhite = true;
flickrXML.onLoad = function(success) {
for (var i = 0; i<this.firstChild.firstChild.childNodes.length; i++) {
var thumbs = _root.createEmptyMovieClip("thumbphoto_mc"+i, _root.getNextHighestDepth());
var farm = flickrXML.firstChild.firstChild.childNodes[i].attributes["farm"];
var server = flickrXML.firstChild.firstChild.childNodes[i].attributes["server"];
var id = flickrXML.firstChild.firstChild.childNodes[i].attributes["id"];
var secret = flickrXML.firstChild.firstChild.childNodes[i].attributes["secret"];
mcLoader.loadClip("http://farm"+[farm]+".static.flickr.com/"+[server]+"/"+[id]+"_"+[secret]+"_t.jpg",thumbs);
thumbs._x = Math.floor(Math.random(1)*410)+60;
thumbs._y = Math.floor(Math.random(1)*380)+60;
}
};
cachekiller = Math.random(10000000);
var senderLoadflickr:LoadVars = new LoadVars();
senderLoadflickr.sendAndLoad("http://www.lowkey.nl/flickr.php?"+cachekiller,flickrXML);

Dauntless
%Europe/Berlin %008 %2008, 00:12
Je laad nu externe afbeeldingen in. Ik denk dat je dat ook via een php script gaat moeten doen. Je php laad dan de .jpg in en output 'm ook gewoon.

(Kan zijn dat het fout is hoor, ben even vergeten hoe het zit met afbeeldingen :#)

tha beaver
%Europe/Berlin %333 %2008, 08:00
Hoi Dauntless dank voor je reactie,

Ik bergrijp echter niet waarom ik de afbeeldingen ook via PHP zou moeten inladen, of is dit een eis van Flickr?

Daarnaast snap ik dan ook niet waarom het lokaal wel werkt?

Dauntless
%Europe/Berlin %336 %2008, 08:05
Laat maar, klopt niet wat ik zei :#

Je kan overigens ook rechtstreeks 'xmlObject.load("phppagina.php?c="+Math.random())' doen. Je hebt er geen apart LV object voor nodig.

Maak van de php pagina url ook eens een relatieve url ?

TheDutch
%Europe/Berlin %371 %2008, 08:55
Ik denk dat hij het lokaal wel doet en online niet omdat Flickr zijn crossdomain.xml niet lijkt te hebben: http://www.flickr.com/crossdomain.xml

Dit ben ik overigens te weten gekomen door het HTTP verkeer vanuit de SWF te loggen. De SWF lijkt dus direct contact te zoeken met Flickr, maar ook met jouw flickr.php :).

Kijk je code nog eens goed na...

// EDIT: De flickr.php redirect naar Flickr.com. Dat moet dus niet! De flickr.php moet met een HTTP request (fopen() (http://nl3.php.net/fopen) ofzo maar zeker geen redirect!) de gegevens inladen vanuit Flickr en vervolgens outputten met een echo. Vandaar dat ik in de log zowel jouw flickr.php zag als flickr.com. Toch even je PHP bestand veranderen dus :).

tha beaver
%Europe/Berlin %738 %2008, 17:43
Hoi Dauntless en TheDutch,

Dank voor jullie beider reacties.

@ TheDutch, op zich snap ik je opmerking maar hoe kan je dan verklaren dat wanneer ik de fla offline test (Tegen de ONLINE staande .PHP ) file dat het goed werkt?

Groetjes Rogier

sander1
%Europe/Berlin %815 %2008, 19:34
Post de PHP code van je flickr.php eens. Daar zit namelijk het probleem in. Als ik bekijk wat in de achtergrond namelijk de HTTP requests zijn, dan zie ik dat bij het opvragen van flickr.php er een HTTP/1.x 302 Found wordt teruggegeven met als locatie
http://www.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=********************************&user_id=22963605@N05

Er wordt dus alsnog geprobeerd een externe XML in te laden en daar gaat Flash op stuk in verband met security policies.

http://www.lowkey.nl/flickr.php?0.409847865346819

GET /flickr.php?0.409847865346819 HTTP/1.1
Host: www.lowkey.nl
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 302 Found
Date: Fri, 15 Feb 2008 18:16:09 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 FrontPage/5.0.2.2635 mod_ruby/1.2.6 Ruby/1.8.6(2007-06-07) mod_ssl/2.0.55 OpenSSL/0.9.8b PHP/5.2.5
X-Powered-By: PHP/5.2.5
Location: http://www.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=********************************&user_id=22963605@N05
Content-Length: 1
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/htmlJe PHP code moet dus niet een redirect geven, maar zelf de XML file inlezen en uitspugen. Dat kan zo:<?php
header("Content-type: application/xml; charset=UTF-8");
$xmlFile = file_get_contents("http://www.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=********************************&user_id=22963605@N05");
echo $xmlFile;
?>En dan werkt het wel, kijk maar: http://flashvideo.damnfinecoffee.eu/misc/flickr/test.swf
:D

Dikke edit ;-) : Ik had de post incl. Edit van TheDutch niet gezien... Daar stond dit ook al in :P

tha beaver
%Europe/Berlin %853 %2008, 20:29
Ok super veel dank Dauntless, TheDutch en Sander1, ik ga er mee aan de slag. Als ik (uiteraard op jullie aanwijzingen) opgelost heb post ik het resultaat nog wel even.

Dikke Edit: @Sander1........ Hoe kan jij mijn API key achterhalen??????? ik dacht dat ik het secure deed door PHP te gebruiken???? :O :# :O

Maar het werkt wel super: wat is trouwens nou het security issue waar ik tegenaan loop als ik het op mijn manier doe (dus met een redirect). ?

sander1
%Europe/Berlin %989 %2008, 23:45
Dikke Edit: @Sander1........ Hoe kan jij mijn API key achterhalen??????? ik dacht dat ik het secure deed door PHP te gebruiken???? :O :# :OVia PHP zou ook secure zijn, maar omdat je via PHP een redirect deed naar de Flickr link werd je API key zichtbaar in de URL. Ik heb 'm in mijn post hierboven ook even wegge-edit overigens.

Maar het werkt wel super: wat is trouwens nou het security issue waar ik tegenaan loop als ik het op mijn manier doe (dus met een redirect). ?Flash mag niet zomaar van een andere server XML bestanden ophalen en lezen. Als je dit wel wilt doen moet er op de server vanwaar je XML bestanden wilt inlezen een policy file (crossdomain.xml) aanwezig zijn waarin staat opgenomen welke hosts toegang krijgen tot bestanden. Zolang jouw domein niet opgenomen is in crossdomain.xml of als crossdomain.xml in z'n geheel ontbreekt (zoals op www.flickr.com) heb je met Flash geen toegang tot de bestanden aldaar.

tha beaver
%Europe/Berlin %050 %2008, 01:12
Dank voor je uitleg Sander1, en dank voor het wegpoetsen van de API key,

Je had al een voorproefje van het resultaat laten zien maar hier nog even voor de records:

Als mensen willen zien wat het geworden is (uiteraard moet ik de functionaliteit nu gaan uitbouwen)

www.lowkey.nl/flickr.swf