googla app engine urlfecting, url 페칭 페이지
특정 사이트에 접속해서 page 내용을 긁어 오는 작업을 구글 앱 엔진을 사용해서 하려 한다.
urlfetch
https://developers.google.com/appengine/docs/python/urlfetch/
python google web engine 에서 다른 url 을 접속할 때 쓰인다.
URL Fetch 와 관련되어서 제한(request size, response size 등)이 있다. 아래 경로에서 확인하자.
https://developers.google.com/appengine/docs/python/urlfetch/overview#Quotas_and_Limits
cron scheduled task 예약된 작업
https://developers.google.com/appengine/docs/python/config/cron
cron.yaml 을 root directory(app.yaml 이 있는 디렉토리) 에 넣으면 된다.
http://localhost:8080/_ah/admin/cron (Development Server)
에 접속해서 cron jobs 를 확인할 수 있다.
그럼 login 을 하는 부분도 제공 해 줘야 한다.
https://developers.google.com/appengine/docs/python/users/loginurls
이것은 Users API 라는 부분이 제공해 준다. 아래는 예시이다.
user = users.get_current_user()
if user:
greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" %
(user.nickname(), users.create_logout_url("/")))
else:
greeting = ("<a href=\"%s\">Sign in or register</a>." %
users.create_login_url("/"))
self.response.out.write("<html><body>%s</body></html>" % greeting)
self.response.out.write("<html><body>%s</body></html>" % greeting)
app.yaml 설정
특정 URL 을 선택했을때 script 를 실행하도록 하기 위해서는 app.yaml 에 설정을 해주어야 한다. 더불어 이것은 외부에서 함부로 접근하지 못하도록 해야 할 수 있다. 그러기 위해서는 app.yaml 에서 설정을 아래처럼 해 주면 된다.
- url: /report/weekly
script: reports.py
login: admin
여기서 한가지 주의 할 점은 다른 handler 의 정의 들보다 우선해서 적어야 한다. 파일의 위쪽에 있는 내용이 우선 적용되기 때문이다.
이것 때문에 애를 먹었는데,
- url: /.*
script: helloworld.py
- url: /update/chart
script: muchart.py
login: admin
만약 app.yaml 이 위와 같은 상태라면, /udate/chart 에 대한 접속 시도를 할 때마다. helloworld.py 에 대한 시도를 하게 돼서 제대로 된 화면을 볼 수 없다. (주로 404 error 를 볼 것이다.)
Logging events
제대로 실행 되는지에 대한 확인을 위해 log 를 찍어보자.
log level 은 5가지가 있다.
Debug, Info, Warning, Error and Critical.
Test 하기
테스트를 위해 script 를 실행 해 보려면 당연한 이야기이지만, webapp2.WSGIApplication instance 가 떠 있어야 한다.
그러므로 app.yaml 에서 찾아서 들어가는 .py 가 instance 를 만들어 줘야 한다. 다시 말하면 muchart.py 에 아래 부분이 들어가야 한다.
app = webapp2.WSGIApplication([('/update/chart', MusicChartPage)
],
debug=True)
def main():
app.run()
if __name__ == '__main__':
main()
정리하면 helloword.py 와 muchart.py 2개 모두 WSGIApplication() instance 를 생성하는 code를 가지고 있으며,
cron.yaml 을 통해서 /update/chart 가 매 주에 작동하도록 했고,
app.yaml 에는 /update/chart URL 에 접속할 때 muchart.py 가 실행되도록 설정 해 줬다.
WSGIApplication() 를 이용할 때와 app.yaml 을 이용시 차이점
참고로, 당연하게 여길지 모르지만, app.yaml 에 따로 muchart.py 에 대한 설정을 해주지 않고, helloworld.py 의 WSGIApplication() 변수에 (‘/update/chart’, MusicChartPage) 를 넣어도 크게 차이는 없다. 다만, 차이가 있다면,
- instance 가 하나만 실행되는 점과,
- 아마도 app.yaml 에서 설정할 수 있는 부분(예를 들면 ‘접근권한’)에 대한 코드를 추가해야 해서 복잡해진다.
정도일 듯 하다. 아직 webapp2 framework 를 잘 몰라서 더이상의 차이점은 잘 모르겠다.
댓글 없음:
댓글 쓰기