<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>data-api &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/data-api/</link>
	<description>Feed of posts on WordPress.com tagged "data-api"</description>
	<pubDate>Wed, 30 Dec 2009 13:38:50 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[pull analytics "site search terms" with google data api]]></title>
<link>http://brianin3d.wordpress.com/2009/12/10/pull-analytics-site-search-terms-with-google-data-api/</link>
<pubDate>Thu, 10 Dec 2009 13:57:56 +0000</pubDate>
<dc:creator>brianin3d</dc:creator>
<guid>http://brianin3d.wordpress.com/2009/12/10/pull-analytics-site-search-terms-with-google-data-api/</guid>
<description><![CDATA[I&#8217;d heard about the google data api, but up until recently hadn&#8217;t found much practical u]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;d heard about the google data api, but up until recently hadn&#8217;t found much practical use for it.</p>
<p>Suddenly I needed to pull back the top search terms for a site monitored by google analytics. The default view only shows 500 at a time. Granted this accounted for 30% of the &#8220;unique searches&#8217;, but I wanted to see a bit more.</p>
<p>Though it was sort of hard to find, I used the example script <a href="http://code.google.com/p/ga-api-http-samples/source/browse/trunk/src/v1/dataFeed.sh?r=2">dataFeed.sh</a> to retrieve the top 10k search terms.</p>
<p>The script wants you to set the variables for username/password and &#8220;PROFILE_ID&#8221; The value for this last is the id=xxxx in the url when you cruise around the analytics site.</p>
<p>Rather than read thru the quirky documentation as to what dimensions and metrics were available, I used the <a href="http://code.google.com/apis/analytics/docs/gdata/gdataExplorer.html">Data Feed Query Explorer</a> to find the values instead:</p>
<pre>
feedUri="https://www.google.com/analytics/feeds/data\
?start-date=2009-08-01\
&#38;end-date=2009-12-04\
&#38;dimensions=ga:searchKeyword\
&#38;metrics=ga:searchDepth,ga:searchDuration,ga:searchExits,ga:searchRefinements,ga:searchUniques,ga:searchVisits\
&#38;sort=-ga:searchUniques\
&#38;max-results=40000\
&#38;ids=ga:$PROFILE_ID\
&#38;prettyprint=true"

curl $feedUri -s --header "Authorization: GoogleLogin $googleAuth"
</pre>
<p>Despite the max-results of 40k, it looks like there is a max of 10k, which is fine.</p>
<p>All in all, pretty ez. Digging it all up.. sort of sucked.</p>
<p>Hence the write up&#8230; hope it helps some buddy!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[BloggerSync, da RSS a post su Blogger in un click!]]></title>
<link>http://andreafortuna.wordpress.com/2008/10/27/bloggersync-da-rss-a-post-su-blogger-in-un-click/</link>
<pubDate>Mon, 27 Oct 2008 11:05:13 +0000</pubDate>
<dc:creator>Andy</dc:creator>
<guid>http://andreafortuna.wordpress.com/2008/10/27/bloggersync-da-rss-a-post-su-blogger-in-un-click/</guid>
<description><![CDATA[Nel precedente articolo spiegavo come utilizzare le Google Blogger Data Api per pubblicare post sull]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://andreafortuna.wordpress.com/files/2008/10/bloggersync.png"><img class="alignright size-thumbnail wp-image-1174" title="bloggersync" src="http://andreafortuna.wordpress.com/files/2008/10/bloggersync.png?w=128" alt="" width="128" height="51" /></a>Nel <a href="http://andreafortuna.wordpress.com/2008/10/20/vbnet-inserire-un-post-su-blogspot-utilizzando-le-google-blogger-data-api/">precedente articolo</a> spiegavo come utilizzare le Google Blogger Data Api per pubblicare post sulla piattaforma di blogging di google.</p>
<p>Lo studio di tali API aveva come obiettivo la realizzazione di un piccolo tool per la pubblicazione automatica su Blogspot da blogs ospitati su piattaforme differenti: per dirla semplice, &#8220;<em>ho un blog su wordpress.com, lo voglio &#8216;migrare&#8217; su blogspot e magari tenere aggiornata questo &#8216;mirror&#8217;, come fare senza utilizzare plugin aggiuntivi?</em> (che, tra le altre cose, wordpress.com non permette di installare)&#8221;.<br />
Ho realizzato quindi una prima bozza di applicazione (in VB.NET) che si occupasse di scorrere un Feed RSS e pubblicare in maniera automatica quanto letto su un blog ospitato su <a href="http://www.blogger.com/">Blogger</a>, tenendo naturalmente conto di quando già pubblicato.</p>
<p>Successivamente ad una prima versione in VB.NET, ho effettuato la conversione in Python, garantendomi la compatibilità con Linux e Mac senza ricorrere all&#8217;utilizzo di <a href="http://www.mono-project.com/Main_Page">Mono</a>.<br />
L&#8217;idea di trasformare il tutto in una WebApp mi frullava per la testa (sarebbe stato bello rendere il tutto fruibile anche da iPhone e dispositivi simili): <a href="http://appengine.google.com/">Google App Engine</a> mi è venuto in aiuto.</p>
<p>Basata interamente su Python, la piattaforma di &#8216;application hosting&#8217; fornita da Google mi permetteva di riutilizzare quanto già scritto senza grosse modifiche e, &#8216;giocando in casa&#8217;, mi permetteva di utilizzare il sistema di autenticazione interno per <a href="http://code.google.com/apis/blogger/developers_guide_python.html#Authenticating">passare le credenziali a Blogspot</a>.</p>
<p>Prendiamo ora in considerazione la stessa <a href="http://andreafortuna.wordpress.com/2008/10/20/vbnet-inserire-un-post-su-blogspot-utilizzando-le-google-blogger-data-api/">funzione da me realizzata in VB.NET</a>, convertita per funzionare sul Google App Engine:</p>
<pre class="brush: python;">

  def CreatePublicPost(self, blogger_service, blog_id, title, content, link):
    query = service.Query()

    #Check entry
    checkentry = db.GqlQuery(&quot;SELECT * FROM PostedEntries where blogid=:1 and titolo=:2&quot;, blog_id, title)
    if (checkentry.count() &gt; 0):
      return &quot;notizia presente&quot;

    entry = gdata.GDataEntry()
    entry.title = atom.Title('xhtml', title)
    content = content + &quot;
&lt;a href='&quot; + link + &quot;'&gt; FONTE &lt;/a&gt;&quot;
    entry.content = atom.Content(content_type='html', text=content)

    #Storing title of posted entry
    elemento = dataclasses.PostedEntries()
    elemento.blogid = blog_id
    elemento.titolo = title
    elemento.put()
    blogger_service.Post(entry, str('/feeds/' + blog_id + '/posts/default'))
    return &quot;pubblicata&quot;
</pre>
<p>l&#8217;unica differenza con la precedente è il metodo utilizzato per controllare la presenza o meno del post che si sta per pubblicare.<br />
Nella versione in VB effettuavo una query su Blogger, scorrendo tutti i post e confrontandone il titolo con quanto stavo per pubblicare.</p>
<p>Sull&#8217;App Engine mi sono quasi subito scontrato con le limitazioni di quota: se un processo utilizza troppi cicli di CPU, l&#8217;applicazione viene momentaneamente &#8216;bloccata&#8217;.<br />
Cosa che accadeva continuamente, essendo il vecchio metodo di controllo non proprio parco nell&#8217;uso della CPU.</p>
<p>Per risolvere il problema mi sono appoggiato sul <a href="http://code.google.com/appengine/docs/datastore/">DataStore</a> interno all&#8217;AppEngine: ogni post inserito viene archiviato, in modo che un successivo ciclo di sincronizzazione escluda automaticamente quanto già pubblicato senza dover andarselo a cercare accedendo a Blogger.</p>
<p>La primissima beta della WebApp la trovate all&#8217;indirizzo <a href="http://bloggersync.appspot.com">http://bloggersync.appspot.com</a>.</p>
<p><a href="http://andreafortuna.wordpress.com/files/2008/10/bloggersync1.png"><img class="alignleft size-thumbnail wp-image-1171" title="bloggersync1" src="http://andreafortuna.wordpress.com/files/2008/10/bloggersync1.png?w=128" alt="" width="128" height="53" /></a>L&#8217;utilizzo è estremamente semplice: una volta effettuato il login con il vostro account di Google e autorizzato BloggerSync ad accedere ai dati di Blogger, verrà visualizzata una scarna pagina contenente i titoli dei blog legati all&#8217;account, con accanto un campo di testo da compilare con il Feed Rss scelto come &#8216;fonte&#8217; per la pubblicazione.</p>
<p><a href="http://andreafortuna.wordpress.com/files/2008/10/immagine-1.png"><img class="alignright size-thumbnail wp-image-1172" title="immagine-1" src="http://andreafortuna.wordpress.com/files/2008/10/immagine-1.png?w=128" alt="" width="128" height="59" /></a>Con la pressione del pulsante &#8220;Pubblica da RSS&#8221; si da il via alla procedura di copia dei contenuti, che si conclude con un report di quanto pubblicato (in quanto nuovo) e quanto già presente e quindi non aggiunto. Il feed inserito viene salvato e riproposto al successivo accesso.</p>
<p>L&#8217;applicazione è ancora immatura, devo occuparmi di risolvere ancora parecchi bugs (come un fastidioso timeout quando viene effettuata primissima operazione di copia), quindi utilizzatela &#8216;as-is&#8217; e a vostro rischio e pericolo: considerando che era nata per mantenere allineati <a href="http://andreafortuna.wordpress.com">http://andreafortuna.wordpress.com</a> e <a href="http://andreafortuna.blogspot.com">http://andreafortuna.blogspot.com</a>, e che ora il secondo a forza di prove e test è diventato un deposito di posts duplicati (nonostante sia riuscito a far funzionare la verifica degli elementi duplicati), ci andrei comunque cauto! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Un&#8217;ultima nota: leggendo queste righe, molti avranno pensato &#8220;<em>simpatico questo, rilascia questo tool e ora sai quanti si divertiranno a copiare i blog altrui!</em>&#8220;. Per arginare almeno in parte il problema, l&#8217;applicazione si prende la briga di aggiungere in coda a ogni post pubblicato un link ben evidente alla fonte. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
