[Soru] Google App Engine + Python Bilen Beri Gelsin
-
Arkadaşlar python 2.7 de ufak bi script yazdım.
http://www.labnol.org/internet/setup-proxy-server/12890/ bu konuyu bilen bilir proxy server kuruyo python ile
appspot alt domain'ine.
buradan yola çıkarak merak ettim biraz kurcaladım script dosyalarını,
amma ve lakin kendi yazdığım script'i bir türlü hatasız çalıştıramadım appspot'da.
Şimdi istediğim şey şu:
xxx.appspot.com/?url=yyy
şeklinde açtığımda main.py'de bu url parametresini nasıl alırız sonra işlem yapıp ekrana nasıl bastırırız?
Bunu anlatsanız yeter ben buradan yürürüm :)
-
#!/usr/bin/env python # # Copyright 2007 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import urllib2 import re from google.appengine.ext import webapp class MyRequestHandler(webapp.RequestHandler): def get(self): url = self.request.get("url") if len(url)>0: self.response.out.write('Url: ' + url + '<br>') usock = urllib2.urlopen(url); data = usock.read(); usock.close(); data = data.replace("'", '"'); s = re.findall(r'(?i)<div[\w\W]*?class="video-box"[\w\W]*?>', data); if len(s)==0: self.response.out.write "Offline" else: self.response.out.write "Online" else: self.response.out.write(''' <html> <body> <form method="post"> <p>Name: <input type="text" name="url" /></p> <p><input type="submit" /></p> </form> </body> </html> ''') app = webapp2.WSGIApplication([ ('/', MainHandler) ], debug=True) -
up olsun hiç mi anlayan yok aga
server hatası veriyo yukarda verdiğim script'im
-
@Daft "/" yolunu MainHandler'a route etmişsin ancak MainHandler yok.
Onu ya MyRequestHandler yapmalı, ya da MyRequestHandler'ı MainHandler olarak adlandırmalısın.
Ama herşeyden öncesi webapp ve webapp2 ile ilgili bir karmaşa var?
Bir de bu yeni python27 apisi ile routing ve handler mapping biraz farklı bir hal aldı, CGI handler ile çalışan uygulamalar python27 runtime'ı ile garip çalışıyor ve hatta çalışmıyor. Bu yeni varsayılan threadsafe özelliği ile ilgili.
Madem python27 ile devam ediyorsun, eski usulü (python25) göstermeyip kodunun biraz değiştirilmiş hali ve ilgili app.yaml ile örnekleyeyim.
main.py (adını değiştirme)
#!/usr/bin/env python import webapp2 import urllib2 import re class MainHandler(webapp2.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/html' url = self.request.get('url') if len(url) > 0: self.response.write('Url: ' + url + '<br>') usock = urllib2.urlopen(url); data = usock.read(); usock.close(); data = data.replace("'", '"'); s = re.findall(r'(?i)<div[\w\W]*?class="video-box"[\w\W]*?>', data); if len(s)==0: self.response.write("Offline") else: self.response.write("Online") else: self.response.write(''' <html> <body> <form action="/"> <p>Name: <input type="text" name="url" /></p> <p><input type="submit" /></p> </form> </body> </html> ''') app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)app.yaml (daftsproxy yi kendi uygulama adın ile değiştirmek isteyebilirsin):
application: daftsproxy version: 1 threadsafe: true runtime: python27 api_version: 1 handlers: - url: /.* script: main.app
Şuan burada çalışıyorlar, bir kaç saate silerim :
-
hacım daşşağı emilecek adamsın (tam umutlarımın tükendiği anda yetiştin)
eyvallah.
not: yanlış anlaşılmasın top değilim, sevgi sözcükleri :)
2.5 de yazacak olsam neler değişirdi onu da yazabilir misin zahmet olmazsa eğer
ha bu arada kodun neden çalışmadığına kafayı öyle takmışım ki webapp2 webapp farkına dikkat bile etmemişim.
copy paste kod zaten oralar sadece iç kısmını ben yazdım.
az çok python biliyorum da appengine dökümanlarından hiçbi ziq anlamamıştım.
YekteranBaymedir tarafından 21/Eyl/13 22:08 tarihinde düzenlenmiştir -
Rica ederim.
Ama belgelerini okuman şart, ötesi iman gücü ile programlama oluyor :D
Artı olarak Windows'da geliştirme yapıyorsan App Engine Launcher'dan ilgili uygulamanın loglarını iyi incele, aşağı yukarı tüm hataları oradan yakalayabilirsin.
Eski usülde şöyle:
daft.py:
#!/usr/bin/env python from google.appengine.ext import webapp from google.appengine.ext.webapp import util import urllib2 import re class MainHandler(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/html' url = self.request.get('url') if len(url) > 0: self.response.write('Url: ' + url + '<br>') usock = urllib2.urlopen(url); data = usock.read(); usock.close(); data = data.replace("'", '"'); s = re.findall(r'(?i)<div[\w\W]*?class="video-box"[\w\W]*?>', data); if len(s)==0: self.response.write("Offline") else: self.response.write("Online") else: self.response.write(''' <html> <body> <form action="/"> <p>Name: <input type="text" name="url" /></p> <p><input type="submit" /></p> </form> </body> </html> ''') def main(): app = webapp.WSGIApplication([('/', MainHandler)], debug=True) util.run_wsgi_app(app) if __name__ == '__main__': main()app.yaml:
application: daftsproxy version: 1 runtime: python api_version: 1 handlers: - url: /.* script: daft.py
buzukatak tarafından 21/Eyl/13 22:26 tarihinde düzenlenmiştir
