{"id":565,"date":"2010-04-11T00:19:46","date_gmt":"2010-04-10T22:19:46","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=565"},"modified":"2010-04-11T00:21:26","modified_gmt":"2010-04-10T22:21:26","slug":"titanium-par-lexemple-un-client-twitter-en-dix-minutes","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2010\/04\/11\/titanium-par-lexemple-un-client-twitter-en-dix-minutes\/","title":{"rendered":"Titanium par l&#8217;exemple, un client twitter en dix minutes."},"content":{"rendered":"<p>Bon, bien entendu mon titre est volontairement accrocheur. Et compl\u00e8tement mensonger. Mais il faut bien app\u00e2ter le chaland un peu. Sinon, je ne serais jamais un blogueur influent.. Alors vive les titres accrocheur \ud83d\ude42<\/p>\n<p>Mais avant de commencer, il faut peut-\u00eatre que j&#8217;explique ce que c&#8217;est que <a href=\"http:\/\/www.appcelerator.com\/\">Titanium<\/a>. Titanium c&#8217;est un framework assez g\u00e9nial (et libre) qui permet de faire du dev iphone\/android en html\/javascript. Histoire que ceux qui n&#8217;aiment ni l&#8217;objective-C, ni le Java puisse tout de m\u00eame coder sur ces plateformes l\u00e0. Histoire aussi de coder qu&#8217;une fois son appli et de la voir tourner sur les deux.<\/p>\n<p>L\u00e0, vous devez \u00eatre en train de vous demander : &#8216;Il va nous parler de dev iphone\/android en js ? &#8216;<\/p>\n<p>Et ben en fait, pas du tout.<\/p>\n<p>Parce que l\u00e0 o\u00f9 Titanium est encore plus g\u00e9nial, c&#8217;est que l&#8217;on peut coder pour le Desktop aussi, en multiplateforme \u00e0 savoir Linux, OSX et Windows. Sympa, vous aller me dire, mais bon faire toute une appli desktop en js, voil\u00e0 quoi \u2026<\/p>\n<p>Oui, mais non, parce que pour le desktop, on peut coder en python (attention en python 2.5 uniquement), en ruby ou.. mis\u00e8re, en php. Et l\u00e0, \u00e7a devient carr\u00e9ment miam.<\/p>\n<p>Ca faisait donc plusieurs mois que j&#8217;avais envie de tester le bouzin, mais bon, j&#8217;avais d\u00e9j\u00e0 pas le temps de bosser sur histoiresderolistes.com alors tester un truc en plus&#8230; Et puis les tests c&#8217;est bien joli mais pour faire des Hello World! Merci.<\/p>\n<p>Mais comme les vacances, ce n&#8217;est pas fait que pour travailler sur le boulot en retard, j&#8217;ai pu m&#8217;y mettre, un peu. (et puis faut avouer que <a href=\"http:\/\/sebastien.porati.me\/blog\/2010\/04\/dailyquote-application-iphone-android-avec-titanium\/\">le billet<\/a> de <a href=\"http:\/\/twitter.com\/popofr13\">@popofr13<\/a> sur le dev titanium iphone m&#8217;a boost\u00e9 \u00e0 \u00e9crire le mien). Restait alors le probl\u00e8me du Hello World. Apr\u00e8s 30 secondes de r\u00e9flexion je me suis dit que bidouiller des trucs avec twitter, \u00e7a serait rigolo. Et en plus comme c&#8217;est bien buzz word twitter, \u00e7a plaira, c&#8217;est sur.<\/p>\n<p>Et c&#8217;est ainsi qu&#8217;un froid jour d&#8217;avril, une nouvelle cat\u00e9gorie d&#8217;article naquit sur le j-mad blog. Une cat\u00e9gorie d\u00e9di\u00e9e aux bidouillages avec Titanium et ayant pour fil rouge le dev d&#8217;un client twitter basique (type Pino quoi). Et comme pour chaque projet, il faut un nom, j&#8217;en ai trouv\u00e9 un TwittPouick. Oui je sais. Non, pas de commentaires sur le nom.<\/p>\n<h1>1- La gen\u00e8se, installation et cr\u00e9ation du projet.<\/h1>\n<p>Alors c&#8217;est tout simple, pour t\u00e9l\u00e9charger Titanium, on va sur le site et on clique sur <a href=\"http:\/\/www.appcelerator.com\/products\/download\/\">t\u00e9l\u00e9chargement<\/a>.<\/p>\n<p>Ensuite il n&#8217;y a qu&#8217;\u00e0 d\u00e9compresser l&#8217;archive et lancer l&#8217;installateur. Petite pr\u00e9cision, il y a assez r\u00e9guli\u00e8rement de nouvelle version, qui sont indiqu\u00e9s directement dans l&#8217;interface de Titanium. Il suffit alors de relancer le cycle dl\/d\u00e9compression\/installation.<\/p>\n<p>Une fois Titanium install\u00e9 et lanc\u00e9, il suffit de cliquer sur New Project pour voir la fen\u00eatre ci dessous appara\u00eetre. Rien de bien difficile \u00e0 comprendre, il suffit de remplir les champs et de cliquer sur create project (N&#8217;oubliez pas de cocher en vert la petite case python tout de m\u00eame).<\/p>\n<p><a href=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/new_project.png\" rel=\"lightbox[565]\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-566\" title=\"new_project\" src=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/new_project-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/new_project-300x169.png 300w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/new_project-1024x577.png 1024w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/new_project.png 1100w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Vous arrivez ensuite sur la fen\u00eatre principale compos\u00e9 d&#8217;\u00e0 gauche la liste de vos projets (sur mon screen on voit d&#8217;ailleurs mon projet twittpouick) et \u00e0 droite ben la zone de droite avec un menu horizontal en haut Dashboard \/ Edit \/ Test &amp; Package.<\/p>\n<p><a href=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/main.png\" rel=\"lightbox[565]\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-567\" title=\"main\" src=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/main-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/main-300x169.png 300w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/main-1024x577.png 1024w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/main.png 1100w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<ul>\n<li>Le premier ne sert \u00e0 rien, c&#8217;est simplement la liste des options en fonction de si on a un abonnement payant ou pas.<\/li>\n<li>L&#8217;onglet Edit sert un peu plus, il permet de modifier les infos que l&#8217;on a saisit \u00e0 la cr\u00e9ation du projet<\/li>\n<li>Enfin Test &amp; Package sera celui sur lequel vous allez passer le plus de temps, vu que c&#8217;est \u00e0 partir de l\u00e0 que vous lancerez votre projet. (et qu&#8217;un jour quand il sera fini vous le packagerait et tout et tout)<\/li>\n<\/ul>\n<h1>2- Et ensuite ?<\/h1>\n<p>Ben ensuite, on prend son navigateur de fichier favori et on va voir ce qu&#8217;il nous \u00e0 g\u00e9n\u00e9rer le tonton Titanium.<br \/>\nEt l&#8217;on voit \u00e7a :<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/fichiers.png\" rel=\"lightbox[565]\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-568 aligncenter\" title=\"fichiers\" src=\"http:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/fichiers.png\" alt=\"\" width=\"259\" height=\"309\" srcset=\"https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/fichiers.png 259w, https:\/\/j-mad.com\/blog\/wp-content\/uploads\/2010\/04\/fichiers-251x300.png 251w\" sizes=\"auto, (max-width: 259px) 100vw, 259px\" \/><\/a><\/p>\n<p>Bon le fichier jquery n&#8217;est pas l\u00e0 de base, c&#8217;est moi qui l&#8217;est rajout\u00e9. Vous comprendrez pourquoi par la suite.<\/p>\n<p>Donc il ne devrait y avoir quasiment que le fichier index.html. Qui correspond \u00e0 notre fen\u00eatre principale. Avant de partir pour de vrai dans des vrais choses rigolotes (comprendre le client twitter), on va tout de m\u00eame faire un hello word. Et oui.<\/p>\n<p>Ouvrez le fichier index.html et remplacez son contenu par celui-ci<\/p>\n<div class=\"codecolorer-container python default\" style=\"overflow:auto;white-space:nowrap;width:435px;\"><div class=\"python codecolorer\"><span class=\"sy0\">&lt;<\/span>html<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>head<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>script <span class=\"kw2\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/python&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">def<\/span> hello_python<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"st0\">&quot;Hello World&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/script<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/head<span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>body <span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div <span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div <span class=\"sy0\">&gt;<\/span>Le Hello World<span class=\"sy0\">&lt;<\/span>\/div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>button onclick<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;alert(hello_python())&quot;<\/span><span class=\"sy0\">&gt;<\/span>Bouton Hello<span class=\"sy0\">&lt;<\/span>\/button<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/body<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>\/html<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>Allez dans Test &amp; Package, cliquez sur Launch App, une fen\u00eatre blanche se lance avec un bouton, cliquez sur le bouton et mirage, une fen\u00eatre Alert javascript s&#8217;affiche avec un Hello World dedans.<\/p>\n<p>Ce qui est logique, si on regarde le code au dessus. On cr\u00e9e une section de code python, on d\u00e9finit une fonction que l&#8217;on appelle sur le onclick du bouton, dans un code js donc, et on passe le retour de la fonction python (je le rappelle) en param\u00e8tre \u00e0 la fonction alert js.<\/p>\n<p>En fait cet exemple, bien que tr\u00e8s simple, montre la plupart des trucs g\u00e9nials de Titanium.<\/p>\n<p>On peut d\u00e9clarer des sections de code python, directement dans les fichiers html (mais on peut le faire proprement en dehors aussi, \u00e7a sera l&#8217;objet d&#8217;un prochain billet) et on peut acc\u00e9der au python du js.<\/p>\n<p>Et c&#8217;est aussi valable dans l&#8217;autre sens. On peut acc\u00e9der du python, \u00e0 du code JS. Que ce soit acc\u00e9der \u00e0 des fonctions ou \u00e0 des variables, que l&#8217;on peut modifier, bien entendu (\u00e0 ce propos, cette <a href=\"https:\/\/developer.appcelerator.com\/doc\/desktop\/python\">page de la doc officielle<\/a> explique la conversion entre les types python \/ javascript.<\/p>\n<h1>3- Et TwittPouick naquit.<\/h1>\n<p>Pour clore ce premier billet, d\u00e9j\u00e0 bien long, et justifier un peu, le titre du billet, on va faire une premier truc, c&#8217;est r\u00e9cup\u00e9rer, apr\u00e8s clic sur un bouton, sa timeline, dans un mode code grouirk, parce que c&#8217;est juste pour finir en beaut\u00e9 ce billet.<\/p>\n<h2>3.1 R\u00e9cup\u00e9ration de sa timeline.<\/h2>\n<p>Je ne connais pas les librairies twitter en python. Et je n&#8217;ai pas vraiment le temps de me plonger dedans pour voir laquelle est la mieux. Par contre je connais bien <a href=\"http:\/\/benoitc.github.com\/restkit\/index.html\">restkit<\/a>, une librairie bien bien sympa de <a href=\"http:\/\/twitter.com\/benoitc\">@benoitc<\/a> et qui marche plut\u00f4t bien.<\/p>\n<p>On va donc l&#8217;utiliser pour r\u00e9cup\u00e9rer sa timeline.<\/p>\n<h2>3.2 Affichage de sa timeline.<\/h2>\n<p>On \u00e0 une interface HTML. On veut modifier le dom. Moi j&#8217;aime bien jquery. Donc on va utiliser Jquery. Directement dans du code python. Et oui. Comme si on \u00e9tait en Js. Sauf que l&#8217;on ne pourra pas utiliser le raccourci $ , vu qu&#8217;on est en python. On va donc simplement utiliser le vrai objet JQuery.<\/p>\n<h2>3.3 Utilisation des API Titanium<\/h2>\n<p>On peut bien entendu, encore heureux, utiliser directement les API titanium qui sont en Js. Pour l&#8217;exemple, j&#8217;utilise Titanium.API.info qui permet d&#8217;afficher une cha\u00eene de caract\u00e8re dans la console.<\/p>\n<p>Bon et maintenant le code, complet, du fichier index.html<\/p>\n<div class=\"codecolorer-container python default\" style=\"overflow:auto;white-space:nowrap;width:435px;height:300px;\"><div class=\"python codecolorer\"><span class=\"sy0\">&lt;<\/span>html<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>head<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>link rel<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;stylesheet&quot;<\/span> <span class=\"kw2\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/css&quot;<\/span> href<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;style.css&quot;<\/span> \/<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>link rel<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;stylesheet&quot;<\/span> <span class=\"kw2\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/css&quot;<\/span> href<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;color.css&quot;<\/span> \/<span class=\"sy0\">&gt;<\/span> &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>script <span class=\"kw2\">type<\/span> <span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span> src<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;jquery-1.3.2.js&quot;<\/span><span class=\"sy0\">&gt;&lt;<\/span>\/script<span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>script <span class=\"kw2\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/python&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">def<\/span> getTimelineJquery<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">from<\/span> restkit <span class=\"kw1\">import<\/span> Resource<span class=\"sy0\">,<\/span> BasicAuth<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">from<\/span> pyquery <span class=\"kw1\">import<\/span> PyQuery <span class=\"kw1\">as<\/span> pq<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">import<\/span> simplejson <span class=\"kw1\">as<\/span> json<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw2\">ImportError<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">import<\/span> json <span class=\"co1\"># py2.6 only<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">class<\/span> TwitterTimeline<span class=\"br0\">&#40;<\/span>Resource<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">def<\/span> <span class=\"kw4\">__init__<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"sy0\">,<\/span> pool_instance<span class=\"sy0\">=<\/span><span class=\"kw2\">None<\/span><span class=\"sy0\">,<\/span> **kwargs<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; search_url <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;https:\/\/api.twitter.com\/1\/statuses\/&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; auth <span class=\"sy0\">=<\/span> BasicAuth<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;TwitterUserName&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;TwitterPassword&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">super<\/span><span class=\"br0\">&#40;<\/span>TwitterTimeline<span class=\"sy0\">,<\/span> <span class=\"kw2\">self<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"kw4\">__init__<\/span><span class=\"br0\">&#40;<\/span>search_url<span class=\"sy0\">,<\/span> follow_redirect<span class=\"sy0\">=<\/span><span class=\"kw2\">True<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max_follow_redirect<span class=\"sy0\">=<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pool_instance<span class=\"sy0\">=<\/span>pool_instance<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filters<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span>auth<span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; **kwargs<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">def<\/span> get_timeline<span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'home_timeline.json'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">def<\/span> request<span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"sy0\">,<\/span> *args<span class=\"sy0\">,<\/span> **kwargs<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resp <span class=\"sy0\">=<\/span> <span class=\"kw2\">super<\/span><span class=\"br0\">&#40;<\/span>TwitterTimeline<span class=\"sy0\">,<\/span> <span class=\"kw2\">self<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">request<\/span><span class=\"br0\">&#40;<\/span>*args<span class=\"sy0\">,<\/span> **kwargs<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> json.<span class=\"me1\">loads<\/span><span class=\"br0\">&#40;<\/span>resp.<span class=\"me1\">body<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s <span class=\"sy0\">=<\/span> TwitterTimeline<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tl <span class=\"sy0\">=<\/span> s.<span class=\"me1\">get_timeline<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> item <span class=\"kw1\">in<\/span> tl :<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; element <span class=\"sy0\">=<\/span> u<span class=\"st0\">&quot;&quot;&quot;&lt;p class=&quot;p_tweet color_p_tweet&quot;&gt; %s : &nbsp;%s&lt;\/p&gt;&quot;&quot;&quot;<\/span> % <span class=\"br0\">&#40;<\/span>item<span class=\"br0\">&#91;<\/span><span class=\"st0\">'user'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">'screen_name'<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> item<span class=\"br0\">&#91;<\/span><span class=\"st0\">'text'<\/span><span class=\"br0\">&#93;<\/span> <span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Titanium.<span class=\"me1\">API<\/span>.<span class=\"me1\">info<\/span> <span class=\"br0\">&#40;<\/span>element<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#timeline&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span>element<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/script<span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/head<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>body <span class=\"kw1\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;body color_body&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">&lt;<\/span>div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>h1<span class=\"sy0\">&gt;<\/span>Votre timeline avec TwittPouick<span class=\"sy0\">&lt;<\/span>\/h1<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>button onclick<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;getTimelineJquery()&quot;<\/span><span class=\"sy0\">&gt;<\/span> Get Timeline Jquery <span class=\"sy0\">&lt;<\/span>\/button<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div <span class=\"kw2\">id<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>\/body<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>\/html<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>Vous n&#8217;avez plus qu&#8217;\u00e0 installer restkit (avec easy_install), pour python 2.5 N&#8217;OUBLIEZ PAS !!!, mettre jquery \u00e0 cot\u00e9 de votre fichier index.html, mettre votre login \/ mot de passe twitter et puis lancer l&#8217;appli twitter.<\/p>\n<p>Cliquer sur le bouton, quelque seconde apr\u00e8s .. miracle les tweets apparaissent. Recliquez sur le bouton, les nouveaux twitts s&#8217;ajoutent en bas de liste&#8230;.<\/p>\n<p>Et voil\u00e0, m\u00eame pas 10 minutes et d\u00e9j\u00e0 vous avez un d\u00e9but de client. Comme quoi, je ne vous avais pas tant men\u00e9 en bateau que \u00e7a, dans mon titre, finalement.<\/p>\n<h1>4- Conclusion.<\/h1>\n<p>Ce premier billet, n&#8217;est qu&#8217;un premier billet. Il ne va pas tr\u00e8s loin dans la pr\u00e9sentation de Titanium, parce que je n&#8217;ai pas vraiment eu le temps de moi m\u00eame faire plus. Vivement les prochains billets donc. Enfin, j&#8217;esp\u00e8re que c&#8217;est ce que vous vous dites en ce moment :).<br \/>\nPour la suite, je mettrais en place un repository mercurial sur bitbucket o\u00f9 je d\u00e9poserais les diff\u00e9rentes \u00e9tapes de la cr\u00e9ation de TwittPouick.<\/p>\n<p>En attendant mon prochain billet, amusez vous bien avec Titanium.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bon, bien entendu mon titre est volontairement accrocheur. Et compl\u00e8tement mensonger. Mais il faut bien app\u00e2ter le chaland un peu. Sinon, je ne serais jamais un blogueur influent.. Alors vive les titres accrocheur \ud83d\ude42 Mais avant de commencer, il faut peut-\u00eatre que j&#8217;explique ce que c&#8217;est que Titanium. Titanium c&#8217;est un framework assez g\u00e9nial (et &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2010\/04\/11\/titanium-par-lexemple-un-client-twitter-en-dix-minutes\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Titanium par l&#8217;exemple, un client twitter en dix minutes.<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[62],"tags":[98,63],"class_list":["post-565","post","type-post","status-publish","format-standard","hentry","category-titanium","tag-python","tag-twitter"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-97","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=565"}],"version-history":[{"count":5,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/565\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/565\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}