<?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; google app engine</title>
	<atom:link href="http://ftoptas.com/category/app-engine/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>
		<item>
		<title>Pardus&#8217;a Google App Engine Kurulumu</title>
		<link>http://ftoptas.com/pardusa-google-app-engine-kurulumu/</link>
		<comments>http://ftoptas.com/pardusa-google-app-engine-kurulumu/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 11:59:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[google app engine]]></category>
		<category><![CDATA[pardus]]></category>

		<guid isPermaLink="false">http://ftoptas.com/?p=242</guid>
		<description><![CDATA[Önceki yazılarımda Google App Engine&#8217;den]]></description>
			<content:encoded><![CDATA[<p>Önceki yazılarımda Google App Engine&#8217;den biraz bahsetmiştim. Kodlarımızı GAE sunucularına yüklemek için veya yerelde çalıştırmak için bir uygulama kullanıyoruz. Windwos için bu uygulama bir .exe dosyası ve çalıştırıp kuruyoruz. Burada sorun yok. Fakat bu uygulamanın Linux versiyonu ise bir .zip dosyası. Bunu nasıl kullanacağımızı görelim:</p>
<p>1. Adım: Uygulamayı indirelim:</p>
<p><a href="http://code.google.com/intl/tr-TR/appengine/downloads.html" target="_blank">şuradan</a> google_appengine_1.2.3.zip dosyasını indiriyoruz.</p>
<p>2. Adım: indirdiğimiz zip dosyasını açıp <span style="color: #000080;">/home/faruk/gae</span> (burada &#8216;faruk&#8217; yerine sizin kullanıcı adınız gelecek) dizinine kopyalıyoruz. Bu kısmı isterseniz sağ tıklayıp buraya çıkar diyerek veya komutlarla şöyle yapabilirsiniz:</p>
<p><span id="more-242"></span></p>
<pre class="python">unzip google_apengine_1.2.3.zip
cp -R googgle_appengine /home/faruk/gae</pre>
<p>Sıkıştırılmış dosyayı açıp /home/faruk/gae dizinine kopyaladık. Uygulamamız bu dizine kurulmuş oldu.</p>
<p>3.Adım: Şimdi de çalışacağımız dizinin içine buradan bir symlink oluşturalım. Çalışacağımız dizin /home/faruk/Desktop/projelerim/ olsun. Şu kodları yazarak symlink oluşturuyoruz:</p>
<pre class="python">sudo ln -s /home/faruk/gae /home/faruk/Desktop/projelerim/gae</pre>
<p>4.Adım: Şimdi tekrar projelerim dizinine dönerek burada herhangi bir GAE uygulaması yapabilirz. Hemen küçük bir uygulama yapalım. Önce deneme isminde bir dizin açalım:</p>
<pre>mkdir deneme</pre>
<p>Bu dizinin içine app.yaml ve main.py dosyalarımızı oluşturalım:</p>
<p>app.yaml:</p>
<pre>application: deneme
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: main.py</pre>
<p>main.py:</p>
<pre class="python">from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Merhaba Pardus')

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

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()</pre>
<p>Şimdi tekrar projelerim dizinine gelerek şu komutları yazalım:</p>
<pre>sudo python gae/dev_appserver.py deneme</pre>
<p>Firefoxu açıp localhost:8080/ adresine girdiğimizde Merhaba Pardus yazısını görüyoruz. Hayırlı olsun&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ftoptas.com/pardusa-google-app-engine-kurulumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django Dersleri &#8211; 3: Google App Engine &amp; Django</title>
		<link>http://ftoptas.com/django-dersleri-3-google-app-engine-django/</link>
		<comments>http://ftoptas.com/django-dersleri-3-google-app-engine-django/#comments</comments>
		<pubDate>Thu, 28 May 2009 11:30:37 +0000</pubDate>
		<dc:creator>ceyranci</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[django dersleri]]></category>

		<guid isPermaLink="false">http://ftoptas.wordpress.com/?p=224</guid>
		<description><![CDATA[