<?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>deadlime &#187; Google</title>
	<atom:link href="http://deadlime.hu/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://deadlime.hu</link>
	<description>unexpected terminator</description>
	<lastBuildDate>Tue, 26 Feb 2013 08:19:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>A Google Reader hasznosítása</title>
		<link>http://deadlime.hu/2007/11/09/a-google-reader-hasznositasa/</link>
		<comments>http://deadlime.hu/2007/11/09/a-google-reader-hasznositasa/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 18:40:24 +0000</pubDate>
		<dc:creator>Nagy Krisztián</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://deadlime.hu/2007/11/09/a-google-reader-hasznositasa/</guid>
		<description><![CDATA[A Google Reader egy rettentő addiktív dolog, ha az ember a feedolvasást választja a hírek beszerzésének kényelmes formájaként. De mi van akkor, ha az itt olvasott dolgokat szeretnénk másokkal is megosztani a saját honlapunkon? És ha a feliratkozásainkból szeretnénk egy blogrollt csinálni az oldalunkon? Természetesen a Google is gondolt erre, ezért mindkettőre van lehetőségünk. Az [...]]]></description>
				<content:encoded><![CDATA[<p>A <a href="http://www.google.com/reader/">Google Reader</a> egy rettentő addiktív dolog, ha az ember a feedolvasást választja a hírek beszerzésének kényelmes formájaként. De mi van akkor, ha az itt olvasott dolgokat szeretnénk másokkal is megosztani a saját honlapunkon? És ha a feliratkozásainkból szeretnénk egy blogrollt csinálni az oldalunkon? Természetesen a Google is gondolt erre, ezért mindkettőre van lehetőségünk.</p>

<p>Az alábbiakban szeretném bemutatni, hogy hogyan is valósíthatjuk meg ezeket a dolgokat, valamint mit tehetünk, ha nem elégszünk meg az alap lehetőségekkel.</p><span id="more-109"></span>

<h3>Blogroll készítése</h3>

<ol>
<li>A Reader felületén kattintsunk az egyik feedünkre és a "Feed settings..." alatt adjunk hozzá egy új könyvtárat (New folder...). Legyen a neve mondjuk "blogroll".</li>
<li>Kellő óvatossággal kattintsuk meg a jobb felső sarokban található "Settings" linket és azon belül is a "Subscriptions" fülecskét.</li>
<li>Jelöljük ki azokat az oldalakat, amiket meg szeretnénk jeleníteni a blogrollunkban és a "More options..." lenyitható űrlapelem segítségével adjuk hozzá a "blogroll" taget.</li>
<li>Menjünk át a "Tags" fülre. A "blogroll" neveztű tag sorában kattintsuk meg azt a kis feed ikonocskát, mire megjelenik egy csomó minden egyéb link is abban a sorban.</li>
<li>A minket érdeklő dolog az "add a blogroll to your site" link. A megkattintás után előjön egy popup, ahol be tudjuk állítani a blogroll dobozunk stílusát.</li>
<li>Most már csak az van hátra, hogy a személyre szabott kódunkat, amit alatta egy textarea-ban legenerált nekünk, kimásoljuk és beillesszük a blogunkra egy megfelelő helyre.</li>
</ol>

<p>De tényleg csak ennyi lenne? Nem tudom, de nekem nem igazán sikerült olyan színsémát találnom, ami igazán passzolt volna a bloghoz, szóval ideje valami alternatív megoldást keresni. A popupban két <code>&lt;script&gt;</code> tag található. Az első egy olyan JavaScript fájl, ami a megjelenítésért felelős, ezért minket nem is érdekel különösebben. Ám a második egy aranyos JSON fájl, ami egy callback függvénynek átadja a nekünk szükséges adatokat. Ennek a linknek is csak az első fele érdekes számunkra a "callback" részig. A callback utáni részt pedig írjuk át nemes egyszerűséggel updateBlogroll-ra. Ezek után valahogy így fog kinézni:</p>

<pre class="code">http://www.google.com/reader/public/javascript-sub/user/AZONOSÍTÓ/label/blogroll?callback=updateBlogroll</pre>

<p>Így egy olyan JavaScript kódot fog legenerálni nekünk a Google, ami meghívja az updateBlogroll függvényt és átadja neki a Reader-ünkből származó adatokat. Így már csak annyi a dolgunk, hogy ezt az <code>updateBlogroll</code> függvényt megírjuk, az őt tartalamzó JS fájt betöltsük a honlapunk <code>&lt;head&gt;</code> részében, a fent említett, Reader által generált JS-t pedig az után a tag után, ahova a blogrollt be szeretnénk szúrni. Egy példa az <code>updateBlogroll</code> függvényre (a kód <a href="http://www.prototypejs.org/">prototype.js</a>-t használ):</p>

<pre class="code prettyprint lang-javascript">function updateBlogroll(data)
{
	var parent = $('blogroll-list');
	parent.innerHTML = '';
	var len = data.items.length;
	for (var i = 0; i &lt; len; ++i)
	{
		parent.insert('&lt;li&gt;&lt;a href=&quot;'+data.items[i].alternate.href+'&quot;&gt;'+data.items[i].title+'&lt;/a&gt;&lt;/li&gt;');
	}
}</pre>

<p>Ha ezt a függvényt mondjuk egy <code>update.js</code> fájlba mentjük el, akkor a HTML kódunk valahogy így nézhet ki:</p>

<pre class="code prettyprint lang-html">...
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;update.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
...
&lt;ul id=&quot;blogroll-list&quot;&gt;Blogroll betöltése...&lt;/ul&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;http://www.google.com/reader/public/javascript-sub/user/AZONOSÍTÓ/label/blogroll?callback=updateBlogroll&quot;&gt;&lt;/script&gt;
...</pre>

<h3>Feed elemek megosztása</h3>

<p>Hasonló módon érhetjük el azt is, ha szeretnénk az általunk érdekesnek talált linkeket megosztani a blogunk látogatóival. A Reader beállításainál a "Tags" fülön található egy "Your shared items" (ide úgy kerülnek bele az elemek, ha "Expanded view"-ban Shift+S-t nyomunk egy bejegyzésen vagy megnyomjuk a "Share" linket az elem alján. "List view"-ban csak az utóbbira van lehetőségünk, ha már kinyitottunk egy elemet). Ennek a sorában kattintsuk meg az "add a clip to your site" linket. Egy hasonló popup ugrott fel, mint a blogroll esetében is. Ha nem szeretnénk saját formázást használni akkor a megfelelő beállítások elvégzése után a textarea-ban található kód beillesztésével végeztünk is. Ellenkező esetben ismét a második <code>&lt;script&gt;</code> tagben lévő linket kell kimásolnunk. A callback után most írjuk az <code>updateLinks</code> függvénynevet, valahogy így:</p>

<pre class="code">http://www.google.com/reader/public/javascript/user/AZONOSÍTÓ/state/com.google/broadcast?n=15&amp;callback=updateLinks</pre>

<p>Az <code>n</code> utáni szám átírásával tudjuk meghatározni, hogy hány darab elemet kapjunk vissza. Az <code>updateLinks</code> függvény is hasonlóan fog kinézni, mint az előző <code>updateBlogroll</code>:</p>

<pre class="code prettyprint lang-javascript">function updateLinks(data)
{
	var parent = $('link-list');
	parent.innerHTML = '';
	var len = data.items.length;
	for (var i = 0; i &lt; len; ++i)
	{
		parent.insert('&lt;li&gt;&lt;a href=&quot;'+data.items[i].alternate.href+'&quot;&gt;'+data.items[i].title+'&lt;/a&gt;&lt;/li&gt;');
	}
}</pre>

<p>Természetesen nem csak ennyi adatot kapunk meg az elemekről. Nézzünk pár fontosabbat a teljesség igénye nélkül (a továbbiakért érdemes a kapott fájlba belenézni):</p>

<ul>
<li><code>data.items[i].published</code><br/>
A bejegyzés publikálásának időpontja Unix timestamp formában.</li>
<li><code>data.items[i].summarySnippet</code><br/>
A bejegyzés rövid, összefoglaló szövege.</li>
<li><code>data.items[i].origin.title</code><br/>
Az oldal neve, ahol megjelent ez a bejegyzés.</li>
<li><code>data.items[i].origin.htmlUrl</code><br/>
Az oldal címe.</li>
</ul>

<p>Körülbelül ennyi lenne a Google Reader pár hasznos felhasználási módjáról. A jobb oldali sáv "Linkek" és "Blogroll" részében látható a működő példa.</p>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2007/11/09/a-google-reader-hasznositasa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Google Web API</title>
		<link>http://deadlime.hu/2006/05/14/google-web-api/</link>
		<comments>http://deadlime.hu/2006/05/14/google-web-api/#comments</comments>
		<pubDate>Sun, 14 May 2006 10:43:04 +0000</pubDate>
		<dc:creator>Polaa</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>

		<guid isPermaLink="false">http://deadlime.hu/2006/05/14/google-web-api/</guid>
		<description><![CDATA[Az egyik legegyszerűbb a google által kínált api-k közül a web api. Ebbe a felületbe három szolgáltatás tartozik bele. Ezek a keresés, a cache-elt oldalak elérése, illetve a helyesírás ellenőrző (google.com -ról ismert Did you mean dolog). Ahhoz, hogy igénybe vehessük az api-t, először regisztrálnunk kell magunknak egy google accountot, majd igényelni kell egy licence [...]]]></description>
				<content:encoded><![CDATA[<p>Az egyik legegyszerűbb a google által kínált api-k közül a web api. Ebbe a felületbe három szolgáltatás tartozik bele. Ezek a keresés, a cache-elt oldalak elérése, illetve a helyesírás ellenőrző (google.com -ról ismert Did you mean dolog). Ahhoz, hogy igénybe vehessük az api-t, először regisztrálnunk kell magunknak egy google accountot, majd igényelni kell egy licence key-t. Ezzel a kulccsal napi 1000 kérést hajthatunk végre. </p>
<span id="more-45"></span>
<p>A szolgáltatások elérése SOAP-al történik. Java illetve .NET nyelvekhez példaprogramokat is letölthetünk, illetve az osztálykönyvtárakat is a könnyebb eléréshez.
Php-ben a beépített SOAP kiterjesztés áll a rendelkezésünkre. Ahhoz, hogy el is érjük ezt a kiterjesztést, linuxon az --enable-soap kapcsolót kell használni, illetve a php.ini-ben szerepeltetni kell az extension-oknál.
Első dolgunk, hogy példányosítunk egy SOAP klienst.</p>
<pre class="code prettyprint lang-php">
$client = new SoapClient('http://api.google.com/GoogleSearch.wsdl');

</pre>
<p>A kliensnek kezdésként meg kell adnunk a web szolgáltatást leíró fájl címét. Ebből fogja "tudni", hogy milyen szolgáltatások, milyen függvények hívhatók meg és azokra mit kell visszakapnia.</p>
<p>A példányosítás után már elég könnyű dolgunk van, csak a megfelelő függvényeket kell meghívnunk a kliensen keresztül. A visszatérési érték mindhárom esetben más típusú.<br/>
A helyesírás ellenőrző:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' 		=&gt; '',		# licence key					
		'phrase' 	=&gt; 'deadlime'	# kifejezés
	);
	$response = $client-&gt;__soapCall('doSpellingSuggestion', $params);

	# mivel wsdl módban vagyunk, ezért akár közvetlenül is meghívhatnánk a függvényt
	//$response = $client-&gt;doSpellingSuggestion(...);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A <code>$response</code> string típusú, ami vagy üres vagy a felajánlott szót tartalmazza. Magyar szavakra sajnos nem működik. Közvetlen hívás esetén a <code>$params</code> tömb helyett "normál" paraméterezéssel kell megadnunk az adatokat.<br/>
A cache-elt oldal:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' =&gt; '', 				# licence key
		'url' =&gt; 'http://www.deadlime.hu'	# az oldal címe, amiről a google által tároltat szeretnénk megkapni
	);
	$response = $client-&gt;__soapCall('doGetCachedPage', $params);
	$response = base64_decode($response);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A cache-elt oldalt base64-ben kódolt szövegként kapjuk meg.<br/>
A keresés:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' 		=&gt; '',  	# licence key
		'q' 		=&gt; 'deadlime',	# keresési kifejezés
		'start' 	=&gt; 0,		# melyik elemtől kezdve adja vissza a találatokat
		'maxResults' 	=&gt; 10,		# mennyi találatot adjon vissza
		'filter' 	=&gt; true,	# eredmény szűrése
		'restrict' 	=&gt; 'countryHU',	# megkötések
		'safeSearch' 	=&gt; false,	# felnőtt tartalmak szűrése
		'lr' 		=&gt; 'lang_hu',	# nyelvi megszorítások
		'ie'		=&gt; '',		# bemeneti karakterkódolás (alapértelmezett: UTF-8)
		'oe'		=&gt; ''		# kimeneti karakterkódolás (alapértelmezett: UTF-8)
	); 
	$response = $client-&gt;__soapCall('doGoogleSearch', $params);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A <code>$response</code> ebben az esetben egy objektum, benne minden fontos adattal. A "filter" illetve a "restrict" sor elsőre valószínűleg nem egyértelmü. A "filter" bekapcsolásával a duplikált találatokat lehet kiszürni. A "restrict" értékéül egy kifejezést adhatunk. Ebben a kifejezésben megadhatjuk, hogy mely oszrágokra, illetve mely témakörökre korlátozzuk a keresést.</p>

<h3>Kapcsolódó linkek:</h3>
<ul>
	<li><a href="https://www.google.com/accounts/NewAccount">Google Account</a></li>
	<li><a href="http://www.google.com/apis/">Google Licence Key</a></li>
	<li><a href="http://php.net/soap">php.net/SOAP</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2006/05/14/google-web-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
