내 앱 엔진 앱의 프런트 엔드에서 this codelab.을 기반으로 작업 해 왔습니다. 주식 시세 기호 (예 : AMZN 또는 GOOG)를 입력하는 텍스트 상자가 있습니다. 이 광고는 백그라운드에서 Google BigQuery에 대한 쿼리를 실행하기위한 기준으로 사용되며 Google 시각화 API line chart에 며칠 동안 트윗 카운트를 표시한다고 가정합니다.App Engine의 Google 시각화 API 관련 문제
그러나 소스 코드에서 본 결과에 따라 BigQuery의 쿼리 결과가 데이터 템플릿 변수 {{data}}로 가져 오지 않습니다. 여기에 대부분의 경우처럼 내 HTML 코드 (라고 index1.html), 년대 코드 랩의 : 나는 라인 차트 구글 코드 놀이터 코드보고 후 HTML과 자바 스크립트로 엉망이 있지만, 정말
<!--
You are free to copy and use this sample in accordance with the terms of the
Apache license (http://www.apache.org/licenses/LICENSE-2.0.html)
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>
Jibdan Analytics
</title>
<script type="text/javascript" src="//www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1', {packages: ['corechart']});
</script>
<script type="text/javascript">
countdata = {{ data }}
function drawVisualization() {
// Create and populate the data table.
var data = google.visualization.DataTable(query_response);
// Create and draw the visualization.
var chart = new google.visualization.LineChart(document.getElementById('visualization'));
chart.draw(data, {title: "Tweets by Day by Ticker",
curveType: "function",
width: 800, height: 600}
);
}
google.setOnLoadCallback(drawVisualization);
</script>
</head>
<body style="font-family: Arial;border: 0 none;">
<div id="visualization" style="width: 800px; height: 640px;"></div>
</body>
</html>
그 문제는 그 템플릿 변수와 같다.
여기에는 관련 Python 코드도 있습니다. 첫 번째 방법은 BigQuery 응답을 가져와 시각화 API에서 처리하여 꺾은 선형 차트를 생성해야하는 형식으로 지정해야합니다. get 메소드에는 실행할 쿼리 문자열이 있으며 결과를 index1.html 템플릿에 렌더링합니다. 코드 랩과 매우 유사합니다.
class QueryHandler(webapp2.RequestHandler):
def _bq2line(self, bqdata):
logging.info(bqdata)
columnNameDate = bqdata['schema']['fields'][0]['name']
columnNameVal = bqdata['schema']['fields'][1]['name']
logging.info("Column Names=%s, %s" % (columnNameDate, columnNameVal))
countdata = { 'cols': ({'id':columnNameDate, 'label':columnNameDate, 'type':'string'},
{'id':columnNameVal, 'label':columnNameVal, 'type':'number'})}
countdata['rows'] = [];
logging.info(countdata)
for row in bqdata['rows']:
newrow = ({'c':[]})
newrow['c'].append({'v': row['f'][0]['v']})
newrow['c'].append({'v':row['f'][1]['v']})
countdata['rows'].append(newrow)
logging.info('FINAL COUNTDATA---')
logging.info(countdata)
self.response.out.write(countdata)
return json.dumps(countdata)
def get(self):
QUERY = """
SELECT STRFTIME_UTC_USEC(querydate, "%Y-%m-%d") AS tweet_date, COUNT(tweet_id) AS tweet_count
FROM [jibdantweetstream.tweetdata_09_21_2013]
WHERE gcs_load = true AND (REGEXP_MATCH(ticker, '""" + self.request.get('stock') + """'))
GROUP BY tweet_date
ORDER BY tweet_date
"""
try:
query_request = bigquery_service.jobs()
query = {'data': self._bq2line(bq.Query(QUERY, BILLING_ID)),
'query': QUERY}
query_response = query_request.query(projectId=BILLING_ID,
body=query).execute()
template = os.path.join(os.path.dirname(__file__), 'result1.html')
self.response.out.write(render(template, query_response))
finally:
self.response.out.write('<a href="/">Click here</a> to go back to the Search page. ')
그렇기 때문에 그것이 있습니다. 내가 self.response.out.write
문을 몇 개 가지고있는 것을 볼 수 있습니다. 왜냐하면 쿼리 결과로 응답을 얻었는지 알고 싶었 기 때문입니다. 결과가 나타남에 따라 OAuth2 문제가 아닌 것으로 알고 있습니다. 나는 그 밖에 무엇이 될 수 있는지 모른다.
Many Thanks in Advance.
내가 거기에 가정은'의 장소에서 출력 데이터에가는 일부 서버 측 처리입니다 {{데이터}}' , 맞지? 그렇다면 문제는 당신이 변수'countdata = {{data}}'를 만들지 만 DataTable 객체를 생성 할 때 변수'query_response'를 참조한다는 것입니다. – asgallant
@asgallant 예, 있습니다. 질의 결과를 검색하여'{{data}} '에 넣어야합니다. 그러나 내가 얻는 것은 빈 평등이다 :'countdata ='. 그래서 전 완전히 혼란 스럽습니다. 귀하의 의견을 주셔서 감사합니다, 그것은 나에게/바이올린과 함께 볼 무언가를 주셨습니다. –
그런 경우'render (template, query_response)'에서'query_response'는 템플릿이 기대하는 키 ('data')를 갖지 않을 것입니다. –