Posted in as3 by nicoB on July 21st, 2007
In this little tutorial, I’ll show you how to connect to the Flickr Service in actionscript3.
First of all, you’ll need :
- a Flickr account
- a Flickr API Key
- the Adobe as3flickrlib
- the Adobe as3corelib
To connect to the flickr service you must understand how it works :

- Classes
We are going to create a few classes :
- FlickrEngine : manage the flickr connection
- FlickrEngineEvent: the event of the FlickrEngine
- Connector: the movieClip class to control the connection
- PhotoManager : the Document class
- FlickrEngine
So, we are going to create a class FlickrEngine:
package com.nicoB.photoManager.flickr {
import com.adobe.webapis.flickr.*;
import com.adobe.webapis.flickr.methodgroups.*;
import com.adobe.webapis.flickr.events.*;
import flash.events.EventDispatcher;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import com.nicoB.photoManager.flickr.FlickrEngineEvent;
public class FlickrEngine extends EventDispatcher{
//var
private var oFlickr : FlickrService;
private var oAuth : Auth;
private var sFrob : String;
private var sId : String;
public function FlickrEngine(){
oFlickr = new FlickrService("API KEY");
oFlickr.secret = "SECRET";
// Event listeners
oFlickr.addEventListener(FlickrResultEvent.AUTH_GET_FROB, _onGetFrob);
oFlickr.addEventListener(FlickrResultEvent.AUTH_GET_TOKEN, _onGetToken);
}
//———————————
// CONNECTION
//———————————
//connect to flickr service : get the application frob
public function connect(){
oAuth = new Auth(oFlickr);
oAuth.getFrob();
}
//event when getting the frob
private function _onGetFrob(e : FlickrResultEvent){
var eEvent:FlickrEngineEvent;
if (e.success){
eEvent = new FlickrEngineEvent(FlickrEngineEvent.ONOPENPOPUP);
dispatchEvent(eEvent);
sFrob = e.data.frob;
var sUrlConnexion = oFlickr.getLoginURL(sFrob, AuthPerm.WRITE);
navigateToURL(new URLRequest(sUrlConnexion), "_blank");
}
else {
trc("error getting frob");
eEvent = new FlickrEngineEvent(FlickrEngineEvent.ONERRORGETTINGFROB);
dispatchEvent(eEvent);
}
}
//get the token when user is registered
public function validConnection(){
oAuth.getToken(sFrob);
}
//event when getting the token
private function _onGetToken(e : FlickrResultEvent){
var eEvent:FlickrEngineEvent;
if (e.success){
var authResult:AuthResult = AuthResult(e.data.auth);
sId = authResult.user.nsid;
trc("user id="+sId);
trc("user perms="+authResult.perms);
oFlickr.token = authResult.token;
oFlickr.permission = authResult.perms;
eEvent = new FlickrEngineEvent(FlickrEngineEvent.ONCONNECTED);
this.dispatchEvent(eEvent);
}
else {
trc("error getting token");
eEvent = new FlickrEngineEvent(FlickrEngineEvent.ONERRORGETTINGTOKEN);
this.dispatchEvent(eEvent);
}
}
//————————————
// TRC
//————————————
private function trc(…statements){
trace("FLICKRENGINE : "+statements.join(", "));
}
}
}
- FlickrEngineEvent
An other class that extends the main event class:
package com.nicoB.photoManager.flickr {
import flash.events.Event;
public class FlickrEngineEvent extends Event{
static public const ONOPENPOPUP:String = "onOpenPopup";
static public const ONERRORGETTINGFROB:String = "onErrorGettingFrob";
static public const ONERRORGETTINGTOKEN:String = "onErrorGettingToken";
static public const ONCONNECTED:String = "onConnected";
public var data:Object;
public function FlickrEngineEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) {
super(type, bubbles, cancelable) ;
}
public function getName():String {
return currentTarget.getName() ;
}
}
}
- Connector
Then we create a MovieClip “Connector” which listen to the flickrengine events and warn the user.
For each event, we’ll create a new frame :

We’ll link a Connector class to this MovieClip :
package com.nicoB.photoManager {
import flash.display.MovieClip;
import com.nicoB.photoManager.flickr.FlickrEngine;
import com.nicoB.photoManager.flickr.FlickrEngineEvent;
import flash.events.MouseEvent;
public class Connector extends MovieClip {
private var iStep : Number;
private var oFlickrEngine : FlickrEngine;
public function Connector(){
iStep = 0;
this.addEventListener(MouseEvent.CLICK, _onRelease);
}
public function init(oFlickrEngine : FlickrEngine){
this.oFlickrEngine = oFlickrEngine;
oFlickrEngine.addEventListener(FlickrEngineEvent.ONERRORGETTINGFROB, _onError);
oFlickrEngine.addEventListener(FlickrEngineEvent.ONERRORGETTINGTOKEN, _onError);
oFlickrEngine.addEventListener(FlickrEngineEvent.ONOPENPOPUP, _onPopupOpened);
oFlickrEngine.addEventListener(FlickrEngineEvent.ONCONNECTED, _onConnected);
}
private function _onRelease(e : MouseEvent){
switch (iStep){
case 0 :
oFlickrEngine.connect();
break;
case 1 :
oFlickrEngine.validConnection();
break;
}
}
//————————————
// EVENT FLICKR ENGINE
//————————————
private function _onError(e : FlickrEngineEvent){
iStep = 2;
gotoAndStop("error");
}
private function _onPopupOpened(e : FlickrEngineEvent){
iStep = 1;
gotoAndStop("waiting");
}
private function _onConnected(e : FlickrEngineEvent){
iStep = 3;
gotoAndStop("connected");
}
//————————————
// TRC
//————————————
private function trc(…statements){
trace("CONNECTOR : "+statements.join(", "));
}
}
}
- PhotoManager
Finally, let’s create a document class to create the flickr engine and initialize the mc connector :
import flash.display.MovieClip;
import com.nicoB.photoManager.flickr.FlickrEngine;
import com.nicoB.photoManager.flickr.FlickrEngineEvent;
public class PhotoManager extends MovieClip {
private var oFlickrEngine : FlickrEngine;
public function PhotoManager(){
oFlickrEngine = new FlickrEngine();
oFlickrEngine.addEventListener(FlickrEngineEvent.ONCONNECTED, _onConnected);
mcConnector.init(oFlickrEngine);
}
private function _onConnected(e : FlickrEngineEvent){
trc("great you’re connected to the flickr service");
}
//————————————
// TRC
//————————————
private function trc(…statements){
trace("PHOTOMANAGER : "+statements.join(", "));
}
}
}
et voilà!


July 21st, 2007 at 11:06 pm
Classe !!!
Une démo ? les sources ? :p
July 21st, 2007 at 11:08 pm
et une ptite démo ???
July 22nd, 2007 at 2:12 pm
I’ve just added a little demo where you can try the connection at this url : http://nicob.info/labs/flickr/connection/connection.html.
July 22nd, 2007 at 6:23 pm
coool