<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog du grand loup Zeur &#187; http</title>
	<atom:link href="http://blog.gaetan-grigis.eu/tag/http/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mon apprentissage de python avec Ogame ^^</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 18:58:51 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[ogame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=630</guid>
		<description><![CDATA[The kikoolol strike back !! Mon deuxième billets de la soirée &#8230;pour pas grand chose en fait. J&#8217;ai voulu apprendre le langage python de façon plutôt ludique en créant un bot qui créer des batiments en boucle pour Ogame &#8230; rien d&#8217;illégal bien entendu ^^. Dans le code Python qui va suivre, vous pourrez comprendre [...]]]></description>
			<content:encoded><![CDATA[<p>The kikoolol strike back !! Mon deuxième billets de la soirée &#8230;pour pas grand chose en fait.</p>
<p>J&#8217;ai voulu apprendre le langage python de façon plutôt ludique en créant un bot qui créer des batiments en boucle pour Ogame &#8230; rien d&#8217;illégal bien entendu ^^.<br />
Dans le code Python qui va suivre, vous pourrez comprendre (ou pas) comment fonctionne :</p>
<ul>
<li>Les requêtes HTTP en python avec des headers à partir de zéro</li>
<li>Les Threads pour les opérations en parallèle</li>
<li>Les Semaphores, pour éviter des requêtes en parallèle (pas apprécié par Ogame dans certain cas)</li>
</ul>
<p>Pour l&#8217;utiliser, il suffit ensuite d&#8217;ajouter au source qui vont suivre : </p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">og = Ogame<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">og.<span class="me1">setSessionCookie</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie phpsessid de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie prssess de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie loginC de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le parametre de l&#39;url &amp;session=&#8230;&quot;</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;uniXX.ogame.fr&quot;</span>votre<span class="co1">#univers</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">Farmer.<span class="me1">buildInChainsPlanets</span><span class="br0">&#40;</span>og,<span class="br0">&#91;</span><span class="st0">&quot;id planete&quot;</span>,<span class="st0">&quot;id planete&quot;</span><span class="br0">&#93;</span>,<span class="br0">&#91;</span><span class="br0">&#91;</span><span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#93;</span>,<span class="br0">&#91;</span><span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>le premier paramètre de buildInChainsPlanets est l&#8217;objet og<br />
le second est un tableau de string contenant l&#8217;id des planètes à &laquo;&nbsp;farmer&nbsp;&raquo;<br />
le troisième est un tableau de tableau contenant les séquences des batiments à construire :<br />
1 pour le metal 2 pour le cristal 3 pour le deuterium 4 pour l&#8217;electricite.</p>
<p>Et voilà &#8230; lorsque vous aurez conquis une planète rajoutez-là au tableau ainsi que la séquence de batiments que vous voulez, puis laissez tourner le script plusieurs jours (faite gaffe avec les sessions qui risque de changer si vous vous reconnectez avec votre navigateur).<br />
<span id="more-630"></span></p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># -*- coding:Utf-8 -*-</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">threading</span> <span class="kw1">import</span> Thread</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">threading</span> <span class="kw1">import</span> Semaphore</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">random</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">httplib</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">time</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">re</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Ogame:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">userAgent</span> = <span class="st0">&quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.3a1pre) Gecko/20091021 Ubuntu/9.10 (karmic) Minefield/3.7a1pre&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">login</span> &nbsp; &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">password</span> &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">PHPSessId</span> = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">prSess</span> &nbsp; &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">loginString</span>= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">session</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">urlGame</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">univers</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">cookie</span> &nbsp; &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">referer</span> = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> setSessionCookie<span class="br0">&#40;</span><span class="kw2">self</span>,sessid=<span class="st0">&quot;&quot;</span>,prsess=<span class="st0">&quot;&quot;</span>,loginString=<span class="st0">&quot;&quot;</span>,session=<span class="st0">&quot;&quot;</span>,univers=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">PHPSessId</span> = sessid</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">prSess</span> &nbsp; &nbsp;= prsess</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">loginString</span>= loginString</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">session</span> &nbsp; = session</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">urlGame</span> &nbsp; = <span class="st0">&quot;/game/index.php?page=overview&amp;session=&quot;</span>+session</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">univers</span> &nbsp; = univers</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">cookie</span> &nbsp; &nbsp;= <span class="st0">&quot;PHPSESSID=&quot;</span>+<span class="kw2">self</span>.<span class="me1">PHPSessId</span>+<span class="st0">&quot;;prsess_165647=&quot;</span>+<span class="kw2">self</span>.<span class="me1">prSess</span>+<span class="st0">&quot;;login_165647=&quot;</span>+<span class="kw2">self</span>.<span class="me1">loginString</span>+<span class="st0">&quot;;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">referer</span> = <span class="st0">&quot;http://&quot;</span>+<span class="kw2">self</span>.<span class="me1">univers</span>+<span class="kw2">self</span>.<span class="me1">urlGame</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getPlanetResource<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; op = OgamePlanet<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> op.<span class="me1">getResource</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> planetAddBuilding<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span>,batiment<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; op = OgamePlanet<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> op.<span class="me1">addBuilding</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> OgamePlanet:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,ogame,<span class="kw2">id</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">planetId</span>=<span class="kw2">id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>=ogame</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">res</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getPlanets<span class="br0">&#40;</span>ogame<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span>ogame.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,ogame.<span class="me1">urlGame</span>,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span> <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span> <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span> <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">select</span>=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;select[^&gt;]*&gt;([<span class="es0">\w</span><span class="es0">\W</span><span class="es0">\n</span><span class="es0">\t</span><span class="es0">\r</span>]*)&lt;/select&gt;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; res=<span class="kw3">re</span>.<span class="me1">findall</span><span class="br0">&#40;</span><span class="st0">&quot;&amp;cp=([^&amp;]*)&amp;[^&gt;]*&gt;([^&lt;]*)&lt;.*<span class="es0">\[</span>([^<span class="es0">\]</span>]*)<span class="es0">\]</span>&quot;</span>,<span class="kw3">select</span>.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> res</div>
</li>
<li class="li1">
<div class="de1">&nbsp;getPlanets = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>getPlanets<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getResource<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; reque=<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">urlGame</span>+<span class="st0">&quot;&amp;cp=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span>+<span class="st0">&quot;&amp;mode=&amp;gid=&amp;messageziel=&amp;re=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,reque,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span>=reque</div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; table=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;table class=&#39;header&#39; id=&#39;resources&#39;[^&gt;]*&gt;([<span class="es0">\w</span><span class="es0">\W</span><span class="es0">\n</span><span class="es0">\t</span><span class="es0">\r</span>]*?)&lt;/table&gt;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; res=<span class="kw3">re</span>.<span class="me1">findall</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;font[^&gt;]*&gt;([.0-9]*)&lt;/font&gt;&quot;</span>,table.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">res</span>=res</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> res</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">#1 metal 2 cristal 3 deuterium 4 electricite</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> addBuilding<span class="br0">&#40;</span><span class="kw2">self</span>, batiment<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; url = <span class="st0">&quot;/game/index.php?page=b_building&amp;session=&quot;</span>+<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">session</span>+<span class="st0">&quot;&amp;cp=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span>+<span class="st0">&quot;&amp;mode=&amp;gid=&amp;messageziel=&amp;re=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,url,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data = rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; link=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;modus=add&amp;techid=&quot;</span>+batiment,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="kw2">str</span><span class="br0">&#40;</span>link<span class="br0">&#41;</span> == <span class="st0">&quot;None&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ti=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;pp=&#39;([0-9]+)&#39;;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw2">str</span><span class="br0">&#40;</span>ti<span class="br0">&#41;</span><span class="sy0">!</span>=<span class="st0">&quot;None&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tps = ti.<span class="me1">groups</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> &#8211; <span class="kw2">int</span><span class="br0">&#40;</span>tps<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#just to say that another things is being constructed Need to change farmer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-3</span><span class="co1">#Don&#39;t get the url to create building</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; reque=<span class="st0">&quot;/game/index.php?page=b_building&amp;session=&quot;</span>+<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">session</span>+<span class="st0">&quot;&amp;modus=add&amp;techid=&quot;</span>+batiment+<span class="st0">&quot;&amp;planet=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,reque,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:url<span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span>=reque</div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; link=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;modus=add&amp;techid=&quot;</span>+batiment,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="kw2">str</span><span class="br0">&#40;</span>link<span class="br0">&#41;</span> == <span class="st0">&quot;None&quot;</span>:<span class="co1">#no link so it&#39;s OK</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ti=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;pp=&#39;([0-9]+)&#39;;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw2">str</span><span class="br0">&#40;</span>ti<span class="br0">&#41;</span><span class="sy0">!</span>=<span class="st0">&quot;None&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tps = ti.<span class="me1">groups</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> tps<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Farming function &#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Farmer<span class="br0">&#40;</span>Thread<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,og,planet,batiments<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Thread.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">og</span> = og</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">planet</span> = planet</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">batiments</span> = batiments</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> run<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> batiment <span class="kw1">in</span> <span class="kw2">self</span>.<span class="me1">batiments</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">self</span>.<span class="me1">sec</span>=<span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;On contruit un batiment : &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span>+<span class="st0">&quot; sur : &quot;</span>+<span class="kw2">self</span>.<span class="me1">planet</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sec</span> = <span class="kw2">self</span>.<span class="me1">og</span>.<span class="me1">planetAddBuilding</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">planet</span>,<span class="kw2">str</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">0</span> <span class="kw1">and</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&gt;</span><span class="nu0">-4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;addTime=<span class="nu0">360</span> + <span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">10</span>,<span class="nu0">120</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;Ajout d&#39;un temps additionnel de &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>addTime<span class="br0">&#41;</span>+<span class="st0">&quot; sec(s) avant le prochain batiment&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>addTime<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">-4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;Un batiment est déjà en construction pour encore &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>-<span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span>+<span class="st0">&quot; sec(s)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>-<span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;On va attendre &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span>+<span class="st0">&quot; secondes avant le prochain batiment&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw2">float</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span><span class="nu0">+2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> buildInChainsPlanets<span class="br0">&#40;</span>og,planets,batiments<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">list</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">#maxCon = 1 default 1 ^^</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; pool_sema = Semaphore<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> index,planet <span class="kw1">in</span> <span class="kw2">enumerate</span><span class="br0">&#40;</span>planets<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;pool_sema.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;tmp = Farmer<span class="br0">&#40;</span>og,planet,batiments<span class="br0">&#91;</span>index<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">list</span>.<span class="me1">append</span><span class="br0">&#40;</span>tmp<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;tmp.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;pool_sema.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> l <span class="kw1">in</span> <span class="kw2">list</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;l.<span class="me1">join</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;buildInChainsPlanets = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>buildInChainsPlanets<span class="br0">&#41;</span></div>
</li>
</ol>
</div>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=630">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/liveusb-fedora9-avec-liveusb-creator/" rel="bookmark" title="Permanent Link: LiveUsb fedora9 avec liveusb creator">LiveUsb fedora9 avec liveusb creator</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/" rel="bookmark" title="Permanent Link: monter un serveur PHP en une ligne de commande (ou presque)">monter un serveur PHP en une ligne de commande (ou presque)</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/scapy-pour-forger-des-paquets-en-python/" rel="bookmark" title="Permanent Link: Scapy pour forger des paquets en python">Scapy pour forger des paquets en python</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/" rel="bookmark" title="Permanent Link: Créer son propre service de mail jetable avec appengine">Créer son propre service de mail jetable avec appengine</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mumuse avec GOLang &#8230;</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 21:37:57 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[html parsing]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=624</guid>
		<description><![CDATA[Depuis pas mal de temps déjà, Google a release un langage qui se veut simple, puissant &#8230; et tout et tout. Pour savoir un peut ce que ça vaut, j&#8217;ai donc installé la bête, et fait un test basique : connexion HTTP/parsing regexp. Pour installer la bestiole (chez moi dans le home/$USER/go) : Les exports [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis pas mal de temps déjà, Google a release un <a href="http://golang.org/" target="_blank">langage</a> qui se veut simple, puissant &#8230; et tout et tout.</p>
<p>Pour savoir un peut ce que ça vaut, j&#8217;ai donc installé la bête, et fait un test basique : connexion HTTP/parsing regexp.</p>
<p><span id="more-624"></span></p>
<p>Pour installer la bestiole (chez moi dans le home/$USER/go) :<br />
Les exports à mettre dans votre .bashrc ou à taper avant chaque compilation/mise à jour :<br />
<code><br />
export GOROOT=~/go<br />
export GOARCH=386 ou amd64 ou arm<br />
export GOOS=linux<br />
export GOBIN=$GOROOT/bin<br />
export PATH=$PATH:$GOBIN<br />
</code><br />
Pour l&#8217;installation :<br />
<code><br />
apt-get install mercurial bison gcc libc6-dev ed make<br />
hg clone -r release https://go.googlecode.com/hg/ $GOROOT<br />
cd $GOROOT/src<br />
./all.bash<br />
</code><br />
Pour mettre à jour :<br />
<code><br />
cd $GOROOT &amp;&amp; hg pull &amp;&amp; hg update &amp;&amp; cd src &amp;&amp; ./all.bash<br />
</code></p>
<p>Pour ensuite compiler un logiciel en go &#8230; c&#8217;est assez spécial, le nom du compilateur/linkeur change suivant votre architecture :</p>
<ul>
<li>8g, 8l pour les x86</li>
<li>6g, 6l pour les amd64</li>
<li>5g, 5l pour les arm</li>
</ul>
<p>Pour ma part étant sur un bon vieux x86, j&#8217;obtiens donc ce genre de choses pour compiler :<br />
<code><br />
8g source.go<br />
8l source.8<br />
./8.out<br />
</code><br />
Il vous faudra donc changer le 8 par le chiffre &laquo;&nbsp;lié&nbsp;&raquo; à votre architecture.</p>
<p>Maintenant la source pour le plaisir des yeux (ou pas ^^), un mini soft récupérant les liens d&#8217;une page web fournit en paramètre (sans vérification du paramètre &#8230;). C&#8217;est mon &laquo;&nbsp;hello world&nbsp;&raquo; à moi.</p>
<div class="geshi no go">
<ol>
<li class="li1">
<div class="de1">package main
</div>
</li>
<li class="li1">
<div class="de1">import &quot;http&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;fmt&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;io&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;regexp&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;flag&quot;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">func main() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;flag.Parse();
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;if(flag.NArg()!=1){fmt.Printf(&quot;Il manque un argument\n&quot;);return;}
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp := new(http.Response);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp,_, _ = http.Get(flag.Arg(0));
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;b,_:=io.ReadAll(resp.Body);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp.Body.Close();
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;result:=string(b);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;/*REGEXP*/
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;re,_:= regexp.Compile(&quot;&lt;a[^&gt;]*&gt;[^&lt;]*&lt;/a&gt;&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;mat:= re.AllMatchesString(result,0);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;for i:=range mat {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; fmt.Printf(&quot;%s\n&quot;,mat[i]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; re,_=regexp.Compile(&quot;href=[\&quot;&#39;]([^\&quot;&#39;&gt;]*)[\&quot;&#39;](.*)?&gt;([^&lt;]*)&lt;/a&gt;&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ma:=re.MatchStrings(mat[i]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; for j:=range ma {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;fmt.Printf(&quot;Got[%d] : %s\n&quot;,j,ma[j]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;}
</div>
</li>
<li class="li1">
<div class="de1">}</div>
</li>
</ol>
</div>
<p>La source ne présente rien de complexe, le but étant juste pour ma part de comprendre la &laquo;&nbsp;logique&nbsp;&raquo; du langage, les retours des fonctions changent pas mal des autres langages (ça autorise juste le retour de plusieurs variables en même temps &#8230; les ingénieurs de chez google ne connaissaient pas les tableaux =)), et le style de déclaration des variables (on peut passer par des déclarations typées pour les intellos, et des déclarations alârache via les := &#8230;).</p>
<p>Niveau performances c&#8217;est sympa (quoiqu&#8217;un script en perl/python/php soit aussi rapide pour ce test &#8230;), niveau syntaxe ça tiens la route, les retours d&#8217;erreurs sont assez explicite ^^.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=624">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/exemple-de-bot-dauthentification-et-de-clic-en-php/" rel="bookmark" title="Permanent Link: Exemple de Bot d&#8217;Authentification et de clic en Php">Exemple de Bot d&#8217;Authentification et de clic en Php</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Jouer avec JavaFX, JSON, HTTP et Jiwa</title>
		<link>http://blog.gaetan-grigis.eu/programmation/jouer-avec-javafx-json-http-et-jiwa/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/jouer-avec-javafx-json-http-et-jiwa/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 18:30:01 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[jiwa]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=564</guid>
		<description><![CDATA[Bijour, Au commencement de mon blog Dieu créa la terre, le ciel, linux, javaFX venait de sortir et j&#8217;avais publié quelques liens intéressant sur la bestiole, mais j&#8217;avais pas fait grand chose avec. Aujourd&#8217;hui &#8230; j&#8217;ai essayé de faire un player musical version Desktop du genre Spotify en JavaFX (parce que Deezer ou Jiwa font [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour,</p>
<p>Au commencement de mon blog <span style="text-decoration: line-through;">Dieu créa la terre, le ciel, linux,</span> javaFX venait de sortir et j&#8217;avais publié quelques liens intéressant sur la bestiole, mais j&#8217;avais pas fait grand chose avec.</p>
<p>Aujourd&#8217;hui &#8230; j&#8217;ai essayé de faire un player musical version Desktop du genre Spotify en JavaFX (parce que Deezer ou Jiwa font pas mal ramer les machines utilisant flash sous linux), une appli qui devait se fournir sympatiquement en musique chez Jiwa.</p>
<p><strong>Plantage du décors et quelques avancement du soft :</strong></p>
<p>La recherche de titres, d&#8217;albums ou artistes se fait via une requête en post à l&#8217;url http://www.jiwa.fr/track/search, et la réponse est de type :</p>
<div class="geshi no json">
<div class="head">{&laquo;&nbsp;page&nbsp;&raquo;:[</div>
<ol>
<li class="li1">
<div class="de1">{&quot;trackId&quot;:133337,
</div>
</li>
<li class="li1">
<div class="de1">&quot;songId&quot;:1337,
</div>
</li>
<li class="li1">
<div class="de1">&quot;songName&quot;:&quot;les kikoolols attaquent!!&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;artistId&quot;:51337,
</div>
</li>
<li class="li1">
<div class="de1">&quot;artistName&quot;:&quot;KikoololMaster&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;secArtistsNames&quot;:null,
</div>
</li>
<li class="li1">
<div class="de1">&quot;albumId&quot;:7331,
</div>
</li>
<li class="li1">
<div class="de1">&quot;albumName&quot;:&quot;Les Kikoolols vaincront&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;songPopularity&quot;:69,
</div>
</li>
<li class="li1">
<div class="de1">&quot;itunesTrackUrl&quot;:null,
</div>
</li>
<li class="li1">
<div class="de1">&quot;albumReleaseDate&quot;:&quot;1969-01-01&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;duration&quot;:&quot;404&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;hidden&quot;:&quot;0&quot;,
</div>
</li>
<li class="li1">
<div class="de1">&quot;sourceId&quot;:null}],
</div>
</li>
<li class="li1">
<div class="de1">&quot;total&quot;:1,
</div>
</li>
<li class="li1">
<div class="de1">&quot;min&quot;:0,
</div>
</li>
<li class="li1">
<div class="de1">&quot;max&quot;:1,
</div>
</li>
<li class="li1">
<div class="de1">&quot;pageSize&quot;:25,
</div>
</li>
<li class="li1">
<div class="de1">&quot;success&quot;:true}</div>
</li>
</ol>
</div>
<p>Il faut donc faire la requête http POST, avec le paramètre Q = notre recherche :</p>
<div class="geshi no java">
<div class="head">var connexion : HttpRequest = HttpRequest {</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; method: HttpRequest.<span class="me1">POST</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; location: locationSearch</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onOutput: function<span class="br0">&#40;</span>os: java.<span class="me1">io</span>.<span class="kw3">OutputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var urlConverter = URLConverter<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var pair = Pair <span class="br0">&#123;</span>name: <span class="st0">&quot;q&quot;</span>,value: <span class="st0">&quot;Les kikoo roxe !!&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var encodedMessage = urlConverter.<span class="me1">encodeParameters</span><span class="br0">&#40;</span><span class="br0">&#91;</span>pair<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">write</span><span class="br0">&#40;</span>encodedMessage.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onInput: function<span class="br0">&#40;</span>is: java.<span class="me1">io</span>.<span class="kw3">InputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//récupération du JSON</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span>connexion.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Rien de complexe jusque-là &#8230; on récupère donc notre JSON, grâce à l&#8217;objet PullParser :</p>
<div class="geshi no java">
<div class="head">try {</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; json.<span class="me1">input</span> = is<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var tmpElmt = <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var i=<span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; json.<span class="me1">onEvent</span> = function<span class="br0">&#40;</span>event: <span class="kw3">Event</span><span class="br0">&#41;</span> : <span class="kw3">Void</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == PullParser.<span class="me1">TEXT</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;artistName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span>event.<span class="me1">text</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;artistName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Artiste : {event.text.trim()} &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;albumName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Album : {event.text.trim()} &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;songName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Titre : {event.text.trim()} &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>i==<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#123;</span>insert tmpElmt.<span class="me1">replaceAll</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span>, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span> into item<span class="sy0">;</span>i=<span class="nu0">0</span><span class="sy0">;</span>tmpElmt=<span class="st0">&quot;&quot;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; json.<span class="me1">parse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">finally</span> <span class="br0">&#123;</span>is.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>On récupère donc le nom de l&#8217;album, du chanteur et le titre de la chanson (les autres paramètres sont pour plus tard) et on l&#8217;insert dans un tableau nommé &laquo;&nbsp;mus&nbsp;&raquo; &#8230;.</p>
<p>Le problème pour la suite, c&#8217;est la récupération de la chanson, qui se passe en deux étapes : la récupération des informations liées au songId et la récupération du mp3.</p>
<p>Grâce au songId l&#8217;on vient de choper dans le JSON, on a accès à l&#8217;étape suivante via une requête POST à l&#8217;url http://m.jiwa.fm/token.php où l&#8217;on envoit le paramètre s avec l&#8217;id &laquo;&nbsp;songId&nbsp;&raquo; retourné dans le JSON plus haut, ce qui donne comme réponse un string de la forme : &laquo;&nbsp;unMD5=8 chiffres=un zero=7 chiffres=3 chiffres&nbsp;&raquo;, ce qui permet apparement de crée l&#8217;url de téléchargement de la chanson :</p>
<p>http://m.jiwa.fm/play.php?r=8 chiffres&amp;s=le songId&amp;t=un md5&amp;m=7 chiffres&amp;from=0, qui renvoit direct le mp3 ou -1 si les paramètres ne sont pas bon :s</p>
<p>Le gros problème étant que le md5 retourné par token.php, n&#8217;est pas celui à fournir dans l&#8217;url du play.php.</p>
<p>Il faut donc ouvrir le player swf ( ou se baser sur iJaw pour les flemmards comme moi ) pour choper la &laquo;&nbsp;clé&nbsp;&raquo;, et récupérer le flux.</p>
<p>Le code complet en javaFX (pour le moment ^^, permet de récupérer le flux, et de le lire &#8230; en executant le jar!!! Via une compilation direct depuis netbeans, il ne trouve pas le mp3) :</p>
<div class="geshi no java">
<div class="head">/*</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span> Main.<span class="me1">fx</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span> Created on <span class="nu0">3</span> oct. <span class="nu0">2009</span>, <span class="nu0">13</span>:<span class="nu0">07</span>:<span class="nu0">02</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span>/</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">package</span> jiwafx<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.stage.Stage;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.Scene;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.io.http.HttpRequest;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.io.http.URLConverter;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.data.Pair;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.control.ListView;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.ext.swing.SwingListItem;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.data.pull.PullParser;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.data.pull.Event;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.control.Button;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.control.TextBox;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.layout.VBox;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.layout.HBox;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.io.http.HttpHeader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.input.MouseEvent;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.media.MediaPlayer;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javafx.scene.media.Media;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.BufferedReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.InputStreamReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.BufferedWriter;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.FileWriter;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.FileOutputStream;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.BufferedInputStream;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.InputStream;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @author cipher16</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Global var</span></div>
</li>
<li class="li1">
<div class="de1">var item : SwingListItem<span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var mus = <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//UI items</span></div>
</li>
<li class="li1">
<div class="de1">var scene = Scene <span class="br0">&#123;</span>width: <span class="nu0">250</span>,height: <span class="nu0">250</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var searchTxt = TextBox<span class="br0">&#123;</span>width:bind <span class="br0">&#40;</span>scene.<span class="me1">width</span> &#8211; <span class="nu0">100</span><span class="br0">&#41;</span>,text: <span class="st0">&quot;Entrer votre recherche&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var searchBtn = <span class="kw3">Button</span><span class="br0">&#123;</span>text: <span class="st0">&quot;Rechercher&quot;</span>,width: <span class="nu0">100</span>,action: function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>searchAlbum<span class="br0">&#40;</span>searchTxt.<span class="me1">text</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var listView : <span class="kw3">ListView</span> = <span class="kw3">ListView</span><span class="br0">&#123;</span>width:bind scene.<span class="me1">width</span>,height: bind <span class="br0">&#40;</span>scene.<span class="me1">height</span> &#8211; searchTxt.<span class="me1">height</span><span class="br0">&#41;</span>,items: bind item<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var SearchBox = HBox <span class="br0">&#123;</span>content: <span class="br0">&#91;</span>searchTxt,searchBtn<span class="br0">&#93;</span>,width: bind scene.<span class="me1">width</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">var player = MediaPlayer<span class="br0">&#123;</span>autoPlay:<span class="kw2">true</span>,onBuffering:function<span class="br0">&#40;</span>d<span class="br0">&#41;</span><span class="br0">&#123;</span>println<span class="br0">&#40;</span><span class="st0">&quot;Encore : &nbsp;{d}&quot;</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">scene.<span class="me1">content</span> = VBox<span class="br0">&#123;</span>content:<span class="br0">&#91;</span>SearchBox,listView<span class="br0">&#93;</span>,width: bind scene.<span class="me1">width</span>,height: bind scene.<span class="me1">height</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">function launchDl<span class="br0">&#40;</span>url:<span class="kw3">String</span><span class="br0">&#41;</span> : <span class="kw3">Void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; var ua = HttpHeader<span class="br0">&#123;</span>name:<span class="st0">&quot;User-Agent&quot;</span>,value:<span class="st0">&quot;Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; HttpRequest <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; method: HttpRequest.<span class="me1">GET</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; headers: <span class="br0">&#91;</span>ua<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; location: url</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onInput: function<span class="br0">&#40;</span>is: java.<span class="me1">io</span>.<span class="kw3">InputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var file = <span class="kw2">new</span> <span class="kw3">FileOutputStream</span><span class="br0">&#40;</span><span class="st0">&#39;jiwa.mp3&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span>is.<span class="me1">available</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">&amp;</span>gt<span class="sy0">;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.<span class="me1">write</span><span class="br0">&#40;</span>is.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; is.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onDone:function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>player.<span class="me1">media</span> = Media<span class="br0">&#123;</span>source:<span class="st0">&quot;{__DIR__}jiwa.mp3&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span>player.<span class="me1">play</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">function getToken<span class="br0">&#40;</span>id:<span class="kw3">String</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; var ret=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; var referer = HttpHeader<span class="br0">&#123;</span>name:<span class="st0">&quot;Referer&quot;</span>,value:<span class="st0">&quot;http://www.jiwa.fm/res/widget/LightPlayer.swf?=1255325694463&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; var ua = HttpHeader<span class="br0">&#123;</span>name:<span class="st0">&quot;User-Agent&quot;</span>,value:<span class="st0">&quot;Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; HttpRequest <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; method: HttpRequest.<span class="me1">POST</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; headers: <span class="br0">&#91;</span>referer,ua<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; location: <span class="st0">&quot;http://m.jiwa.fm/token.php&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onOutput: function<span class="br0">&#40;</span>os: java.<span class="me1">io</span>.<span class="kw3">OutputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var urlConverter = URLConverter<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var pairS = Pair <span class="br0">&#123;</span>name: <span class="st0">&quot;s&quot;</span>,value: id<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var encodedMessage = urlConverter.<span class="me1">encodeParameters</span><span class="br0">&#40;</span><span class="br0">&#91;</span>pairS<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">write</span><span class="br0">&#40;</span>encodedMessage.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onInput: function<span class="br0">&#40;</span>is: java.<span class="me1">io</span>.<span class="kw3">InputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var buff = <span class="kw2">new</span> <span class="kw3">BufferedReader</span> <span class="br0">&#40;</span><span class="kw2">new</span> <span class="kw3">InputStreamReader</span><span class="br0">&#40;</span>is<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var line = <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="br0">&#40;</span>line = buff.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">!</span>=<span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret=<span class="st0">&quot;{ret}{line}&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; is.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onDone: function<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; launchDl<span class="br0">&#40;</span>getTrackUrl<span class="br0">&#40;</span>ret,id<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">function getTrackUrl<span class="br0">&#40;</span>token:<span class="kw3">String</span>,sid:<span class="kw3">String</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;var t_vals = token.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;=&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; var url=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>t_vals.<span class="me1">length</span><span class="sy0">&amp;</span>gt<span class="sy0">;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var a = MD5.<span class="me1">toHex</span><span class="br0">&#40;</span><span class="st0">&#39;gwqd29ydg7sqys_qsh0&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var b = MD5.<span class="me1">toHex</span><span class="br0">&#40;</span><span class="st0">&quot;{t_vals[0]}{a}{sid}&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url = <span class="st0">&quot;http://m.jiwa.fm/play.php?r={t_vals[1]}&amp;amp;s={sid}&amp;amp;t={b}&amp;amp;m={t_vals[3]}&amp;amp;from=0&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> url<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">function searchAlbum<span class="br0">&#40;</span>search: <span class="kw3">String</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; item = <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><span class="co1">//on reset à la barbare <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; HttpRequest <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; method: HttpRequest.<span class="me1">POST</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; location: <span class="st0">&quot;http://www.jiwa.fr/track/search&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onOutput: function<span class="br0">&#40;</span>os: java.<span class="me1">io</span>.<span class="kw3">OutputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var urlConverter = URLConverter<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var pair = Pair <span class="br0">&#123;</span>name: <span class="st0">&quot;q&quot;</span>,value: search<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var encodedMessage = urlConverter.<span class="me1">encodeParameters</span><span class="br0">&#40;</span><span class="br0">&#91;</span>pair<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">write</span><span class="br0">&#40;</span>encodedMessage.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; onInput: function<span class="br0">&#40;</span>is: java.<span class="me1">io</span>.<span class="kw3">InputStream</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var json : PullParser = PullParser <span class="br0">&#123;</span>documentType: PullParser.<span class="me1">JSON</span>,input:is<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var tmpElmt = <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var i=<span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var it = SwingListItem<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; json.<span class="me1">onEvent</span> = function<span class="br0">&#40;</span>event: <span class="kw3">Event</span><span class="br0">&#41;</span> : <span class="kw3">Void</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == PullParser.<span class="me1">TEXT</span> or event.<span class="me1">type</span> == PullParser.<span class="me1">INTEGER</span> or event.<span class="me1">type</span> == PullParser.<span class="me1">NUMBER</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;artistName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Artiste : {event.text.trim()} &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;albumName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Album : {event.text.trim()} &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;songName&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>tmpElmt=tmpElmt.<span class="me1">concat</span><span class="br0">&#40;</span><span class="st0">&quot;Titre : {event.text.trim()}&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;songId&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>i++<span class="sy0">;</span>it.<span class="me1">value</span>=<span class="st0">&quot;{it.value};{event.integerValue}&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;artistId&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>i++<span class="sy0">;</span><span class="br0">&#125;</span><span class="co1">//Lol xD Da Kikoolol Attack!!!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">name</span> == <span class="st0">&quot;trackId&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>i++<span class="sy0">;</span>it.<span class="me1">value</span>=<span class="st0">&quot;{event.integerValue}&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>i<span class="sy0">&amp;</span>gt<span class="sy0">;</span>=<span class="nu0">6</span><span class="br0">&#41;</span><span class="br0">&#123;</span> it.<span class="me1">text</span>=tmpElmt.<span class="me1">replaceAll</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span>, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> insert it into item<span class="sy0">;</span>i=<span class="nu0">0</span><span class="sy0">;</span>tmpElmt=<span class="st0">&quot;&quot;</span><span class="sy0">;</span>it=SwingListItem<span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; json.<span class="me1">parse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">finally</span> <span class="br0">&#123;</span>is.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">listView.<span class="me1">onMouseClicked</span> = function<span class="br0">&#40;</span>e:<span class="kw3">MouseEvent</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; player.<span class="me1">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; player.<span class="me1">media</span>.<span class="me1">source</span> = <span class="kw2">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; player.<span class="me1">media</span> = <span class="kw2">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; var ids = item<span class="br0">&#91;</span>listView.<span class="me1">selectedIndex</span><span class="br0">&#93;</span>.<span class="me1">value</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; getToken<span class="br0">&#40;</span>ids<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Stage <span class="br0">&#123;</span>title: <span class="st0">&quot;JiwaFX&quot;</span>,scene: scene<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Et tire cette tête là une fois executé (avec une recherche sérieuse) :</p>
<p><img class="aligncenter size-medium wp-image-565" title="Capture" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2009/10/Capture-300x242.png" alt="Capture" width="300" height="242" />Ce qui est pas trop mal pour un début &#8230; j&#8217;essaierais de faire la même chose pour deezer, avec la clé de l&#8217;API cette fois &#8230; histoire de réussir un truc plus abouti^^. J&#8217;ai juste posté le code pour aider les nouveaux en JavaFX (pour l&#8217;utilisation de requêtes POST en HTTP, très mal documenté par SUN et sur le parsing JSON, encore plus mal documenté &#8230;).</p>
<p>Le code est assez crade, car on est obligé d&#8217;attendre la fin (probable) de deux évènements (le chargement des deux pages token et play) pour lancer la musique.</p>
<p>L&#8217;un des gros problèmes actuel, c&#8217;est que Jiwa rejette les User-Agent en Java, ce qui fait que l&#8217;on ne peut pas directement filer l&#8217;url retourné par la fonction à la source du media, d&#8217;où l&#8217;obligation de passer par un fichier temporaire.</p>
<p>Voilà, amusez-vous bien</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 972px; width: 1px; height: 1px;">try {<br />
json.input = is;<br />
var tmpElmt = &laquo;&nbsp;&nbsp;&raquo;;<br />
var i=0;<br />
json.onEvent = function(event: Event) : Void{<br />
if( event.type == PullParser.TEXT ){</p>
<p>if(event.name == &laquo;&nbsp;artistName&nbsp;&raquo;){tmpElmt.concat(event.text);}<br />
else if (event.name == &laquo;&nbsp;artistName&nbsp;&raquo;){tmpElmt=tmpElmt.concat(&laquo;&nbsp;Artiste : {event.text.trim()} &laquo;&nbsp;);i++;}<br />
else if (event.name == &laquo;&nbsp;albumName&nbsp;&raquo;){tmpElmt=tmpElmt.concat(&laquo;&nbsp;Album : {event.text.trim()} &laquo;&nbsp;);i++;}<br />
else if (event.name == &laquo;&nbsp;songName&nbsp;&raquo;){tmpElmt=tmpElmt.concat(&laquo;&nbsp;Titre : {event.text.trim()} &laquo;&nbsp;);i++;}<br />
if(i==2){insert tmpElmt.replaceAll(&laquo;&nbsp;\n&nbsp;&raquo;, &laquo;&nbsp;&nbsp;&raquo;).trim() into item;i=0;tmpElmt=&nbsp;&raquo;";}<br />
}<br />
};<br />
json.parse();<br />
} finally {is.close();}</p></div>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=564">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/java/javafx-quelque-liens-utile/" rel="bookmark" title="Permanent Link: JavaFX &#8230; quelque liens utile">JavaFX &#8230; quelque liens utile</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/youtubefx-jnlp/" rel="bookmark" title="Permanent Link: Youtube et JavaFX via MediaView">Youtube et JavaFX via MediaView</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/extension-chrome-previsualisation-des-videos-sur-itunes/" rel="bookmark" title="Permanent Link: Extension chrome : Prévisualisation des vidéos sur Itunes">Extension chrome : Prévisualisation des vidéos sur Itunes</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/gnash-lalternative-a-flash/" rel="bookmark" title="Permanent Link: Gnash l&#8217;alternative à Flash ?">Gnash l&#8217;alternative à Flash ?</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/jouer-avec-javafx-json-http-et-jiwa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

