<?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>ftoptas blog &#187; urlfetch</title>
	<atom:link href="http://ftoptas.com/tag/urlfetch/feed/" rel="self" type="application/rss+xml" />
	<link>http://ftoptas.com</link>
	<description>[beta]</description>
	<lastBuildDate>Sun, 05 Sep 2010 21:27:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Google App Engine ile Alexa Rank Değerini Okuma &#8211; urlfetch fonksiyonu</title>
		<link>http://ftoptas.com/google-app-engine-ile-alexa-rank-degerini-okuma-urlfetch-fonksiyonu/</link>
		<comments>http://ftoptas.com/google-app-engine-ile-alexa-rank-degerini-okuma-urlfetch-fonksiyonu/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 13:18:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[google app engine]]></category>
		<category><![CDATA[alexa rank]]></category>
		<category><![CDATA[urlfetch]]></category>

		<guid isPermaLink="false">http://ftoptas.com/?p=321</guid>
		<description><![CDATA[Bugünlerde sitemin alexa rank değeri]]></description>
			<content:encoded><![CDATA[<p>Bugünlerde sitemin alexa rank değeri aniden 2 katından fazla artınca biraz kafayı taktım. Derken Google App Engine ile değeri okumaya çalıştım ve sizinle paylaşıyorum.</p>
<p>Bu yazıyı okumaya devam etmeden önce <a href="http://ftoptas.com/google-app-engine-ile-uygulama-gelistirme/" target="_blank">şuradaki</a> yazımı okumanızı öneriyorum.</p>
<p>Önce alexa isminde bir çalışma dizini oluşturuyoruz. Bu dizinin içine app.yaml isminde bir dosya oluşturuyoruz. Dosyanın içeriğini şöyle yapıyoruz:</p>
<pre name="code" class="python">application: alexa-rank-ogren
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: main.py</pre>
<p><span id="more-321"></span></p>
<p>İlk satırdaki alexa-rank-ogren degeri <a href="http://appengine.google.com" target="_blank">appengine.google.com</a> adresine girip Create an Application dedikten sonra girdiğimiz Application Identifier değeri olmalıdır.</p>
<p>Şimdi de burada belirttiğmiz <span style="color: #0000ff;">main.py</span> dosyasını da <span style="color: #0000ff;">app.yaml</span> dosyasının yanına oluşturuyoruz.<span style="color: #0000ff;"> main.py</span> dosyası da şöyle olsun:</p>
<pre name="code" class="python">from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
import re,urllib

class MainPage(webapp.RequestHandler):
    def get(self,url):
        self.response.headers['Content-Type'] = 'text/plain'
        url = 'http://www.alexa.com/siteinfo/'+ url
        try:
            content = urlfetch.fetch(url).content
            up = re.search('&lt;img src="/images/icons/globe-sm.jpg" alt="Global" style="margin-bottom:-2px;"/&gt; [0-9,]{1,10}&lt;/a&gt;',content)
            up = re.search('[0-9,]{1,10}&lt;/a&gt;',up.group()).group()
            sonuc = up[0:-4]
        except:
            sonuc = 'hata'
        self.response.out.write(sonuc)

application = webapp.WSGIApplication([(r'/(.*)',MainPage)],debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()</pre>
<p>Burada önce <span style="color: #008000;">MainPage</span> isminde bir sınıf oluşturduk ardından sınıfın içinde oluşturduğumuz get fonksiyonu ile sayfaya gelen istek sonucunda sayfanın gösterdiği değeri belirleyeceğiz. Bu fonksiyonun bir parametresi olan url şu şekilde okunuyor:</p>
<p>http://alexa-rank-ogren.appspot.com/<span style="color: #008000;">ftoptas.com</span></p>
<p>Bu adresteki<span style="color: #008000;"> ftoptas.com</span> kısmı urlyi oluşturmaktadır. Çünkü sadece bir parametremiz var o da ilk<span style="color: #008000;"> &#8216;/&#8217; </span>karakterinden sonra gelen kısımdır.</p>
<p>alexa rank değerini okuyacağımız siteyi öğrendik şimdi de alexaya bağlanıyoruz. Sitenin alexa rank değeri de</p>
<p>http://www.alexa.com/siteinfo/ftoptas.com adresindedir.</p>
<p><span style="color: #008000;">urlfetch() </span>fonksiyonuyla bu siteyi çekiyoruz. Yaklaşık olarak 26KB&#8217;lik bir dosya. Şimdi bir düzenli ifade yazarak bu 26KB&#8217;lik dosyanın içinden sadece alexa rank değerini alacağız.</p>
<p>Eğer FireBug ile bu sayfayı incelersek alexa rank değerinin olduğu yerdeki kodlar şöyledir:</p>
<pre>&lt;img src="/images/icons/globe-sm.jpg" alt="Global" style="margin-bottom:-2px;"/&gt; 4,274,049&lt;/a&gt;</pre>
<p>Bu ifadeyi 12. satırda buluyoruz ve 13.satırda ikinci defa düzenli ifade (regex) kullanarak buradaki sayıyı çekiyoruz.</p>
<p>try kullanmamızın nedeni ise olmayan bir url girdiğimizde bize &#8216;hata&#8217; değerini döndürmesi içindir.</p>
<p>Oluşturduğumuz WSGIApplication parametrelerinde ise urllerin nasıl olacağını belirttik. Yani hangi fonksiyonun hangi url ile bağlantılı olacağını yazdık.</p>
<p>Burada <span style="color: #008000;">&#8216;/&#8217;</span> yerine <span style="color: #008000;"> r&#8217;/(.*)&#8217;</span> kullanmamızın nedeni ise http://alexa-rank-ogren.appspot.com/ adresinden sonra bir parametre geleceğini belirtmek.</p>
<p>Eğer http://alexa-rank-ogren.appspot.com/alexa/ftoptas.com urlsini kullandığımızda <span style="color: #008000;">MainPage </span>fonksiyonunu çağırmak isteseydik şu ifadeyi kullanırdık:</p>
<p><span style="color: #008000;">r&#8217;/alexa/(.*)&#8217;</span></p>
<p>veya MainPage fonksiyonunda iki parametre kullanmak isteseydik şöyle yapardık:</p>
<p><span style="color: #008000;">r&#8217;/(.*)/(.*)&#8217;</span></p>
<p>Yani regex kullanarak çok esnek urller oluşturabiliriz.</p>
<p>Gördüğünüz gibi 26KB&#8217;lik bir veriyi kendi sunucunuzda çekip işlemek hem trafiği hem de işlemci yükünü arttırır. Google app engine kullanarak bu yükü google sunucuların yükledik.  Sistemin çalışan halini şu adreslerden test edebilirsiniz.</p>
<p><a href="http://f-toptas.appspot.com/alexa/google.com" target="_blank">http://f-toptas.appspot.com/alexa/google.com</a></p>
<p><a href="http://f-toptas.appspot.com/alexa/ftoptas.com">http://f-toptas.appspot.com/alexa/ftoptas.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ftoptas.com/google-app-engine-ile-alexa-rank-degerini-okuma-urlfetch-fonksiyonu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
