26
Api web 2.0

Api web 2.0

  • Upload
    karik

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

Api web 2.0. Representational state transfer. REST is not a protocol or a format its a kind of architecture A service is accessed with its URI through HTTP operation like GET, POST, PUT or DELETE. Enough for most of web services Example : http://www.inria.fr/add?var=1&var=2  3 ;). - PowerPoint PPT Presentation

Citation preview

Page 1: Api web 2.0

Api web 2.0

Page 2: Api web 2.0

Representational state transfer

• REST is not a protocol or a format its a kind of architecture

• A service is accessed with its URI through HTTP operation like GET, POST, PUT or DELETE.

• Enough for most of web services

• Example :

http://www.inria.fr/add?var=1&var=2 3 ;)

Page 3: Api web 2.0

HTTP Query with JAVA• Init the HTTP query:URL url = new URL("my_url");HttpURLConnection UrlConn = (HttpURLConnection)

url.openConnection();urlConn.setRequestMethod("GET");urlConn.setAllowUserInteraction(false);urlConn.setDoOutput(true);

• Read the answerInputStream response = urlConn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(response));while ((String line = o_oBufReader.readLine()) != null){

//do whatever you want}

• DiconnecturlConn.disconnect();

Page 4: Api web 2.0

AJAX

• Asynchronous javascript

• HTTP query in javascript without reloading all the page

• Richer interfaces

• Example: mail notification and instant messaging in gmail.

Page 5: Api web 2.0

AJAX : init the query

Var xhr;

if (window.XMLHttpRequest) { xhr = new XMLHttpRequest();     // Firefox, Safari, ...

} else if (window.ActiveXObject) {

xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer } or

try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); //try Internet Explorer

}catch(e) { xhr = new XMLHttpRequest() //firefox, safari ...

}

Page 6: Api web 2.0

AJAX : send and process query

• Process function :

request.onreadystatechange = function(){ // instructions

};

• Send the query : xhr.open('GET', 'http://web2/api/method?param=value', true);xhr.send(null);

• Important: Same Origin PolicySo use a servlet as intermediary

Page 7: Api web 2.0

JSON: JavaScript Object Notationhttp://www.json.org/

• JSON object:var person = { "name" : "John"

"phone" : [ {"type" : "home", "num" : "1234"}, {"type" : "mobile", "num" : "5678"} ]

}; person.name; person.phone[0].num;

• Eval function:var JSONString = "someVar = { 'color' : 'blue' }";  

eval(JSONString); • Tutorial: http://www.hunlock.com/blogs/Mastering_JSON_(_JavaScript_Object_Notation_)

Page 8: Api web 2.0

API flickrhttp://www.flickr.com/services/api/

• API_Key and secret:http://www.flickr.com/services/api/keys/apply/

Note : il faut un compte Yahoo pour y accèder.

• URL API: http://api.flickr.com/services/rest/?method=method_name&param1=value1&param2=value2...

• Paramètre souvent requis: api_key– On demande la clé en ligne, cf URL ci-dessus.

• Recherche de photos par tags:http://api.flickr.com/services/rest/?method=flickr.photos.search&tags=a_tag&api_key=your_key

Page 9: Api web 2.0

Example of XML Response

• URL API: http://api.flickr.com/services/rest/?method_name&param1=value1&param2=value2...

• Paramètre souvent requis: api_key

• Recherche de photos par tags:http://api.flickr.com/services/rest/?method=flickr.photos.search&tags=a_tag&api_key=your_key

Page 10: Api web 2.0

Don't worry: API JAVA ;)

• Dom API:DocumentBuilderFactory fabrique =

DocumentBuilderFactory.newInstance();DocumentBuilder constructeur =

fabrique.newDocumentBuilder();Document document = constructeur.parse(rdfFile);Element racine = document.getDocumentElement();NodeList photos = racine.getElementsByTagName("photo");for(int i = 0; i < photos.getLength(); i++){

photos.item(i).getAttributes() …}

• Or just forget to manipulate XML: http://sourceforge.net/projects/flickrj/

Page 11: Api web 2.0

FlickrJ: API JAVAhttp://sourceforge.net/projects/flickrj/

• Init service:Flickr flickr = new Flickr(apiKey, secret, new REST());

• Different interfaces:– flickr.getPhotosInterface()– flickr.getPeopleInterface()– flickr.getContactsInterface()– flickr.getLicensesInterface()– flickr.getTagsInterface()– …

Page 12: Api web 2.0

FlickrJ: examplehttp://sourceforge.net/projects/flickrj/

• Init service:Flickr flickr = new

Flickr("47422029b3aabee4aca6a5853eca74b6", "ab7f2d30639a9828", new REST());

PhotosInterface pi = flickr.getPhotosInterface();

SearchParameters sp = new SearchParameters(); String []tabTag = {« cars »}; sp.setTags(tabTag);

PhotoList photoList = pi.search(sp, 50, 1); Iterator it = photoList.iterator();

while (it.hasNext()) { Photo photo = (Photo) it.next(); out.println("<img src='" +

photo.getThumbnailUrl() + "' />"); }

Page 13: Api web 2.0

JSON and flickrhttp://api.flickr.com/services/rest/?method=method_name&format=json

• URL API: Example: flickr.blogs.getList– XML response

<blogs> <blog id="73" name="Bloxus" url="http://remote.bloxus.com/" /> <blog id="74" name="Manila" url="http://test1.userland.com/" />

</blogs>

– JSON responsersp = { "stat": "ok",

"blogs": { "blog": [{ "id" : "73", "name" : "Bloxus", "url" : "..."

}{ "id" : "74", "name" : "Manila", "url" :

"..." } ] } }

• URL API: Examplefor (var i=0; i<rsp.blogs.blog.length; i++){

var blog = rsp.blogs.blog[i]...

}

Page 14: Api web 2.0

Youtubehttp://code.google.com/apis/youtube

• API key and secret:http://code.google.com/apis/youtube/dashboard

• REST interface:http://www.youtube.com/api2_rest

• To request a response in JSON format, use the alt=json parameter.

• Server side API: Java, .NET, PHP, python …

• Widget and players API (client side): javascript, flash

Page 15: Api web 2.0

API JAVA Youtubehttp://code.google.com/p/gdata-java-client/downloads/list

• Importimport com.google.gdata.client.youtube.YouTubeService;import com.google.gdata.util.ServiceException;

• Init serviceYouTubeService myService =

new YouTubeService("the name of my app");

• Init search query:YouTubeQuery query =

new YouTubeQuery(new URL(URL_VIDEOS_FEED));

• Appel au service:VideoFeed videoFeed =

service.query(query, VideoFeed.class); for (VideoEntry ve : videoFeed.getEntries()) { ... }

Page 16: Api web 2.0

API Youtube

• Parametrize query:– search terms: query.setVideoQuery(searchTerms); – Order: RELEVANCE, VIEW_COUNT, PUBLISHED, RATING :

query.setOrderBy(YouTubeQuery.OrderBy.RELEVANCE); – Number of results: query.setMaxResults(count);– Pagination: query.setStartIndex(start); – include restricted content (excluded by default): query.setIncludeRacy(true);

• Code example

Page 17: Api web 2.0

Google search: AJAX APIhttp://code.google.com/apis/ajaxsearch/documentation/

• Basis:// create a search controlvar searchControl = new google.search.SearchControl(null);

// add in a full set of searcherssearchControl.addSearcher(new google.search.LocalSearch());searchControl.addSearcher(new google.search.WebSearch());searchControl.addSearcher(new google.search.VideoSearch());searchControl.addSearcher(new google.search.BlogSearch());searchControl.addSearcher(new google.search.NewsSearch());searchControl.addSearcher(new google.search.ImageSearch());searchControl.addSearcher(new google.search.BookSearch());searchControl.addSearcher(new google.search.PatentSearch());

// tell the searcher to draw itself and tell it where to attach// Note that an element must exist within the HTML document with id "search_control"searchControl.draw(document.getElementById("search_control"));

Page 18: Api web 2.0

Google search: AJAX APIhttp://code.google.com/apis/ajaxsearch/documentation/

• SearcherControl Draw Modes:– create a drawOptions object

var drawOptions = new google.search.DrawOptions();

– tell the searcher to draw itself in linear mode

drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_LINEAR);

– tell the searcher to draw itself in linear mode

drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);

– decouple the "search form" from the set of search results

drawOptions.setSearchFormRoot(document.getElementById("id_dom_elem"));

– Display results :

searchControl.draw(element, drawOptions);

Page 19: Api web 2.0

Google search: AJAX APIhttp://code.google.com/apis/ajaxsearch/documentation/

• Keeping a Search Result:// establish a keep callbacksearchControl.setOnKeepCallback(this, MyKeepHandler);

function MyKeepHandler(result) { // clone the result html nodevar node = result.html.cloneNode(true); // attach itvar savedResults = document.getElementById("saved_results");savedResults.appendChild(node);

}

Page 20: Api web 2.0

Google maphttp://code.google.com/apis/ajaxse

arch/

http://gmaps-samples.googlecode.com/svn/trunk/demogallery.html

Page 21: Api web 2.0

API Facebook

• Install facebook "Developper" application to get API_Key and secret.

• Interface restful:http://api.facebook.com/restserver.php?

v=1.0&api_key=YOUR_API_KEY&method=METHOD_NAME&sig=METHOD_OPTIONS

• FacebookML: A meta language to develop facebook apps (interpreted on facebook servers)

• FQL: Facebook Query Language• Server API: Php, java, .NET, etc;

Page 22: Api web 2.0

API java pour Facebook

• Plus maintenue par facebook:

Alternatives: http://code.google.com/p/facebook-java-api

• Authentification de l'application:

Facebook fb = new Facebook(request, response, FB_API_KEY, FB_SECRET_KEY);

fb.requireLogin("") if(!face.isLogin()) return null; //can't access applicationFacebookRestClient fbrclient = fb.getFacebookRestClient();

• Id utilisateur:

fbrclient.users_getLoggedInUser();

Page 23: Api web 2.0

API java pour Facebook

• Récupérer le nom et status de l'utilisateur courant (un peu compliqué, mais bon…):

//fill the list of users

ArrayList<Long> user = new ArrayList<Long>();//set of information required on usersEnumSet<ProfileField> fields =

EnumSet.of(com.facebook.api.ProfileField.NAME,com.facebook.api.ProfileField.STATUS);

users.add(fbrclient.users_getLoggedInUser()); Document d = fbrclient.users_getInfo(users, fields);String userName =

d.getElementsByTagName(com.facebook.api.ProfileField.NAME.fieldName).item(0).getTextContent();

String userName =

d.getElementsByTagName(com.facebook.api.ProfileField.NAME.fieldName).item(0).getTextContent();

Page 24: Api web 2.0

API java pour Facebook

• Informations sur les amis:

Document d = fbrclient.friends_get();NodeList userIDNodes = d.getElementsByTagName("uid");Collection<Integer> friends = new ArrayList<Integer>(); for (int i = 0; i < userIDNodes.getLength(); i++) {

Node node = userIDNodes.item(i);Integer id = Integer.valueOf(node.getTextContent());friends.add(id);

}Document infos =

fbrclient.users_getInfo(users, fields);//then we can iterate on the list of friends id and get the

informationfor(Integer id : friends){

String fieldName = infos.getElementsByTagName(...).item(i).getTextContent(); //etc.

}

Page 25: Api web 2.0

And more…

• All google apps: http://code.google.com/more– Open social http://code.google.com/apis/opensocial/

– Maps: http://code.google.com/apis/maps/– Etc.

• Delicious: http://delicious.com/help/api • Digg: http://apidoc.digg.com/ • Technorati: http://technorati.com/developers/api/• And most of web 2.0 platforms propose access

to their data through APIs!!!

Page 26: Api web 2.0

It's your turn now !!!

Build a search engine that search on different web 2.0 services and propose differents médias:

• Photos with flickr• Video with youtube• People and social features with facebook• And whatever you want with web 2.0 APIs.