1

我下面這個教程獲得打破鏈接錯誤whle使用App Engine服務帳戶

https://developers.google.com/bigquery/docs/authorization#service-accounts-appengine 

這裏是我的main.py代碼

import httplib2 

from apiclient.discovery import build 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 
from oauth2client.appengine import AppAssertionCredentials 

# BigQuery API Settings 
SCOPE = 'https://www.googleapis.com/auth/bigquery' 
PROJECT_NUMBER = 'XXXXXXXXXX' # REPLACE WITH YOUR Project ID 

# Create a new API service for interacting with BigQuery 
credentials = AppAssertionCredentials(scope=SCOPE) 
http = credentials.authorize(httplib2.Http()) 
bigquery_service = build('bigquery', 'v2', http=http) 


class ListDatasets(webapp.RequestHandler): 
    def get(self): 
    datasets = bigquery_service.datasets() 
    listReply = datasets.list(projectId=PROJECT_NUMBER).execute() 
    self.response.out.write('Dataset list:') 
    self.response.out.write(listReply) 


application = webapp.WSGIApplication(
            [('/listdatasets(.*)', ListDatasets)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

這裏是我的app.yaml文件中的代碼

application: bigquerymashup 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.py 

是的,我已經添加應用程序引擎服務帳戶名稱在谷歌API控制檯團隊選項卡可以編輯權限。 當上傳應用程序,並嘗試訪問該鏈接,它說

Oops! This link appears to be broken. 

Ealier我跑了本地本和嘗試使用鏈接localhost:8080。於是我想到的可能是在本地運行,所以我上傳可能在向錯誤訪問它我代碼到

http://bigquerymashup.appspot.com/ 

但仍然給它錯誤。

編輯: 更新的app.yaml

application: bigquerymashup 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.py 

- url: /listdatasets 
    script: main.py 

但是,讓另一個錯誤

Traceback (most recent call last): File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp2‌​5.py", line 710, in call handler.get(*groups) TypeError: get() takes exactly 1 argument (2 given) 
+0

1.您是否在此行上添加了項目編號? PROJECT_NUMBER ='XXXXXXXXXX'#用您的項目ID替換# 2.您嘗試連接的鏈接是什麼?你的app.yaml文件是什麼樣的? –

+0

是我添加了項目號。我已經更新了app.yaml和其他細節的問題。我嘗試使用localhost:8080和http://bigquerymashup.appspot.com/在那裏我上傳代碼 – iJade

回答

1

您需要定義您要查找的URL匹配的腳本處理程序。

嘗試:http://[your_app_id_here].appspot.com/listdatasets

瞭解更多關於處理程序here

+0

我只是更新我的app.yaml(更新的app.yaml問題太),因爲你說,並試圖瀏覽鏈接http://bigquerymashup.appspot.com/listdatasets,但現在它給另一個錯誤追溯(最近最後調用最後): 文件「 /base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py「,710行,__call__ handler.get(* groups) TypeError:get()只需要1個參數(2給定) – iJade

+1

將「/listdatasets(.*)」更改爲「/ listdatasets」。另請注意,您更新的app.yaml不正確 - 您不需要在app.yaml中包含「url:/ listdatasets」行。 catchall「url:。*」處理程序應該繼續使用,因爲它會匹配每個URL,然後再敲擊它下面的/ listdatasets處理程序。這超出了原始問題的範圍(所有內容都在上面的鏈接中解釋),但我會看看更新我們的示例。 –

+0

thnks dat工作正常。我只是有一個疑問。爲了這個東西的工作,我不得不將它上傳到appspot.Is dere任何方式來使用App Engine服務帳戶在本地主機上運行這個 – iJade

相關問題