2013-08-24 2 views
1

나는 블로그에서 동시에 웹 개발을 배우고있다. JSON에 대해 더 자세히 배우고 싶습니다. 따라서 블로그의 전체 내용을 JSON 및 이후 XML로 내보내는 방법을 구현하려고합니다. 나는 많은 문제를 겪고 있는데, 가장 큰 것은 JSON/XML로 동적으로 렌더링하려는 페이지의 URL을 얻는 것입니다. 내 웹 사이트의 코드는 here입니다. 나는 더 많은 것을 논평 할 필요가 있으며 많은 기능을 구현해야한다.블로그의 내용을 JSON으로 내보내는 방법은 무엇입니까?

class JSONHandler(BaseHandler): 
#TODO: get a way to gt the url from the request 
def get(self): 
    self.response.headers['Content-Type'] = 'application/json' 
    url = "http://www.bigb-myapp.appspot.com/blog" 
    #url = self.request.path_url 
    logging.info(url) 
    page = urllib2.urlopen(url).read() 
    soup = BeautifulSoup(page) 
    subject_list = [] 
    day_list = [] 
    content_list = [] 

    subjects = soup.findAll('div', {'class' : 'subject-title'}) 
    days = soup.findAll('div', {'class' : 'day'}) 
    contents = soup.findAll('div', {'class' : 'post'}) 

    for subject in subjects: 
     subject_list.append(subject.findAll(text = True)) 

    for day in days: 
     day_list.append(day.findAll(text = True)) 

    for content in contents: 
     content_list.append(content.findAll(text = True)) 

    i = 0 

    for s, d, c in subject_list, day_list, content_list: 
     json_text = json.dumps({'subject': s[i][i],'day': d[i][i], 'content': c[i][i]}) 
     i += 1 

    self.write(json_text) 

나는 또한 인쇄 기능이 잘못된 것을 확신하지만 그건 쉬운 부분입니다 다음과 같이 JSON에 내용을 수출 할 책임이 메인 클래스입니다. 나는 URL을 얻는 것이 큰 어려움을 겪고 있다고 말했다.

url 양식을 환경 변수로 가져 오려고 시도했으며 webapp2의 요청 처리기 (예 : self.request.path_url)를 사용하지 않아도됩니다.

Google App Engine에서 jinja2 템플릿 엔진을 사용하고 있습니다.

감사합니다.

+1

"JSON/XML로 동적으로 렌더링하려는 페이지의 URL을 얻는 가장 큰 방법"은 무엇을 의미합니까? – lpapp

+0

@LaszloPapp 방금 더 자세히 질문을 편집했습니다. 그리고 내가 원하는 것은 URL을 하드 코딩하고 싶지 않고 대신 요청에서 가져 오기를 원합니다. 그러나 그것은 어렵다는 것을 입증하고 있습니다. 메인 페이지와 퍼머 링크 페이지 모두에 대해 비슷한 템플릿이 있으므로이 클래스를 사용하여 해당 페이지를 JSON으로 내보낼 수 있기를 바랍니다. – Bhargav

답변

2

self.request.url 또는 self.request.path이 트릭을 수행해야합니다. 그러나 더 좋은 방법은 퍼머 링크 섹션에서 사용한 것과 비슷한 방법을 사용하는 것입니다. 요청에서 post-id를 구문 분석하면됩니다. 즉, JSONHandler를 분리하여 두 가지를 처리해야합니다. 즉, 전체 블로그를 반환하고, 개별 게시물을 반환해야합니다.

블로그 게시물을 얻으려면이 방법을 사용하지 않는 것이 좋습니다 ... Mainpage 클래스에서 GQL을 사용하면 우아하게 처리 할 수 ​​있습니다. 그렇다면 왜 urllib2와 BeautifulSoup를 사용해야합니까? 편집을 할 self.response.out.write("something")

추가 할 :

그리고 응답에 대한 마지막 질문으로 ... 올바른 방법입니다

내가 거기있을 것 같은 것을 두 부분으로 JSONHandler을 분할하는 의미
이 핸들러 : ('/blog/(\d+).json',PermalinkJSONHandler),
('/blog.json',FullJSONHandler),...

정확한 정보를 얻기 위해 둘 다 서로 다른 GQL을 사용하여 거의 동일해야합니다 (json을 덤프하는 데 동일한 기능 사용).

+0

정말 고마워요, 정말 생각하지 않았습니다. 확실히 많은 옵션을 열고 처음 몇 가지 질문을 제기합니다. JSONHandler를 어떻게 분할할까요? 나는 이것을 다시 생각해 볼 것이다. 다시 감사한다. – Bhargav

+0

그리고'''self.write''는 실제로'''''self.response.out.write'''를 사용하는 함수입니다. – Bhargav

+1

@Bhargav 그리고 JSON에서 어떤 것을 출력하기 위해서는 http : //stackoverflow.com/questions/12664696/how-to-properly-output-json-with-app-engine-python-webapp2/12664865#12664865 – Lipis

관련 문제