2011-05-05 17 views
10

Google gdata API istemcisi + kullanıcı/pass kimlik doğrulamasını kullanarak bir Python komut dosyasını üretime daha uygun bir şeye dönüştürmek için çalışıyorum (bir API anahtarı). Kimlik doğrulamasıyla ilgili belgelerinin karışık durumundan oldukça sinirliyim. Kuşkusuz, OAuth2'nin harika bir kavrayışına sahip değilim, ancak kullanım durumum için daha karmaşık bir yöntem gibi görünüyor: Bu, sitemizdeki en popüler X makalelerini almak için her 24 saatte bir Google Analytics'e gidin.gdata-python-api + Basit auth'lı analitik

Bu senaryoda, kişinin kişisel verilerini değiştirmeyle uğraşmıyoruz ve tüm etkinlikler tek bir hesapta ortalanıyor. OAuth2 çok basit bir şey için karmaşıklığa değmez gibi görünmüyor.

Bunu Google API Konsolu'nda (https://code.google.com/apis/console/) görüyorum, orada kaydoldum ve altında bir anahtar bulunan "Basit API Erişimi" bölümünün olduğunu fark ettim. "Web uygulamaları için istemci kimliği" (OAuth2 olarak görünüyor). Ayrıca Google etki alanı güncelleme sayfası, https://www.google.com/accounts/UpdateDomain da var, ancak OAuth ile alakalı görünüyor.

Python gdata istemcisi ile analiz verilerini almak için bu Basit API Erişimi anahtarını (OAuth değil) kullanmanın bir yolu var mı, varsa, herhangi bir kimlik doğrulama örneği var mı? Zaten bir kez doğrulanmış veri alma şeyleri var, ama üretim için uygun olmayan kullanıcı/geçiş yaklaşımını kullanıyorum.

+0

bu gerçekten katılıyorum: belirteci ve revoke orijinaline tarayıcısına gitmek zorunda kalmadan başka bir tane almak istiyorum, ha tarafından oluşturulan url ziyaret ederek yeni bir yenileme jetonu almak üzere approval_prompt parametresini kullanabilirsiniz sinir bozucu, şimdi aynı teknedeyim. Yalnızca kendi verilerinizi kullanıyorsanız ve kullanıcı hesaplarıyla kimlik doğrulaması yapmanız gerekmiyorsa OAuth2 kullanım durumu gerçekten anlamlı değildir. Bu yüzden neden çok fazla apis hareket ettikleri konusunda kafam karıştı. Anladığım kadarıyla OAuth1 bu geri dönüş url'si olmadan çalışıyor mu? Basit api anahtarını da kullanmayı tercih ederim, ancak bunun kullanımdan kaldırılıp kaldırılmadığı ve hangi aidatta olduğu açık değil.Umarız google yakında bu düzeltildi! –

+0

Bu sorudan bu yana 6 ay geçti, kimse bir cevap buldu? Buraya 2 tane benzer soru sordum. Http://stackoverflow.com/questions/8263776/how-to-use-oauth-with-google-calendar-to-access-only-one-calendar ve burada http: // stackoverflow .com/questions/8270994/how-do-i-use-googles-basit-api-access-key-to-access-google-takvim-info-ph ve benim sorunum aynı: Erişime ihtiyacım yok Bir başkası takvimi, sadece ONE'a erişmem gerekiyor. Bu yüzden Geliştirici Anahtar gitmenin yolu olmalı, ancak HERHANGİ eğitmenleri ya da örneklerini bulamıyorum. Birisi yardım edebilir mi? – Joel

+1

Ayrıca sıfırdan basit https://www.googleapis.com/analytics/v3/management/accounts/XXXXX/webproperties/UA-XXXXX-1/profiles?pp=1&key={YOUR-KEY-HERE} adresini denedim başarısı. Kendi verileriniz olsa bile OAuth'a ihtiyacınız olduğunu düşünüyorum = (.. Bu soruya bir çözüm bulmayı çok isterim. – DougA

cevap

12

Greg

Zaten kütüphanesini gdata-python-client kullanıyorsanız, bu başvurunuzun yetki edilecek tek kullanıcı iseniz yapmak nispeten kolaydır. Genel mekanizmalar Eylül 2011'de bir blog post numaralı belge içinde ayrıntılı olarak açıklanmıştır, ancak bunları eksiksiz olarak açıklayacağım.

Part 1: APIs console'a gidin ve yeni bir proje başlatın.

Bölüm 2: proje itibaren, "Analizler API"

Bölüm "Hizmetler" gidip etkinleştirmek 3: proje itibaren, "API Erişimi" gidin ve bir OAuth'u oluştur" öğesini 2.0 müşteri kimliği ... "(sağladığınız değer önemli değil) bir ürün adı belirtmeniz gerekir. Uygulama türü sorulduğunda, "Yüklü Uygulama" yı ve ardından "İstemci Kimliği Oluştur" u seçin. Tek kullanıcı olacağınız için yalnızca bir yenileme jetonuna ihtiyacınız olacak ve bunu bir masaüstü uygulamasından tek seferde yetkilendirerek alabilirsiniz.

Bölüm 4: API'ler konsoldan istemci kimliği ve müşteri sırrı alın ve daha sonra boş bir belirteç oluşturmak: Eğer öyleyse emin değilim gerçi,

import gdata.gauth 

CLIENT_ID = 'id-from-apis-console' 
CLIENT_SECRET = 'secret-from-apis-console' 
SCOPE = 'https://www.google.com/analytics/feeds/' # Default scope for analytics 

token = gdata.gauth.OAuth2Token(
    client_id=CLIENT_ID, 
    client_secret=CLIENT_SECRET, 
    scope=SCOPE, 
    user_agent='application-name-goes-here') 

ben GData FAQ skopu var doğru.

Bölüm 5: ziyaret etmek için yetkilendirme URL oluşturmak için belirteci kullanın: Uygulama bir "Yüklü Uygulaması" olduğunu

url = token.generate_authorize_url(redirect_uri='urn:ietf:wg:oauth:2.0:oob') 

olduğundan, yönlendirme URI varsayılan 'urn:ietf:wg:oauth:2.0:oob' olduğunu. (Ayrıca, blog yayınının bir yazım hatası olduğunu ve redirect_url anahtar kelimesini kullandığını unutmayın.

Part 6: URL'yi ziyaret edin ve başvurunuzu hesabınızın adına yapmak için başvurunuzu yetkilendirin. Yetkilendirildikten sonra, üzerinde bir kod bulunan bir sayfaya yönlendirileceksiniz. Bu kod, bir erişim belirteci ve uzun ömürlü bir yenileme belirteci değiştirmek için kullanılacaktır. Kodun 10 dakikalık bir ömrü vardır ve erişim belirtecinin bir saat ömrü vardır. Yenileme jetonu, kalıcılık taleplerini imzalamak için yeni erişim belirteçleri almanıza izin verir (ya da sizden revoke hesabınızın iznine kadar).

Bölüm 7: Bir erişim jetonu almak üzere kodu kullanın: Biz yüklü bir uygulama kullanıyorsanız çünkü

code = 'random-string-from-redirected-page' 
token.get_access_token(code) # This returns the token, but also changes the state 

Bu yine, blog yayını biraz farklıdır.

Bölüm 8: Eğer şimdi analitik müşteriye yapmak isteyen tüm isteklerini yapabilir belirteci olarak:

import gdata.analytics.client 

client = gdata.analytics.client.AnalyticsClient() 
token.authorize(client) 

Bu hak burada büyük paradır. Erişim belirtecinin süresi dolduğunda, bu belirteçle imzalanan API istekleri reddedilir. Ancak, istemciyi yukarıdaki gibi yetkilendirerek, söz konusu istekler başarısız olduğunda, token, yeni erişim belirteci almak için yenileme belirtecini kullanmaya çalışır. Yeni bir erişim belirteci başarıyla alırsa, istemci yeni erişim belirteci ile imzalanmış orijinal API isteğini yeniden gönderir.

Analytics API'yla ilgili hiçbir şey bilmiyorum, böylece daha fazla ayrıntı vermeyeceğim.

Gelecek Kullanım Not 1: Bilgileri ileride kullanmak üzere kaydetme. Bunu farklı yerlerden tekrar kullanabilirsiniz ve bu kullanımdan sonra kolayca kullanabilirsiniz. Bir diziden bir belirteç dönüm ve bir dize dışına dönüştürerek izin kütüphanesi tarafından sağlanan token_to_blob ve token_from_blob denilen yöntem vardır: Bunu yaptıktan sonra

saved_blob_string = gdata.gauth.token_to_blob(token) 

, bir dosyada dize depolamak ve öldürebilir senin Python işleminin çalıştırılması. Tekrar kullanmak istiyorum zaman:

saved_blob_string = retrieve_string_from_file() # You'll need to implement this 
token = gdata.gauth.token_from_blob(saved_blob_string) 

Gelecek Kullanım Not 2: Bu simge çok uzun olması gibi bir istemci yetki ve tekrar ve tekrar tüm büyü yapmak için kullanılacak mümkün olacak etrafında yenileme belirteci.

token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob' 

Gelecek Kullanım Not 3: nedense sen token.generate_authorize_url uğramadan belirteç tekrar erişim elde etmek isterseniz, el nesnede bu ayarlamanız gerekir Ayrıca size yenileme, kaybedersem

url = token.generate_authorize_url(
    redirect_uri='urn:ietf:wg:oauth:2.0:oob', 
    approval_prompt='force') 
+0

Bunun bir yıl önce yayınlandığını biliyorum, ama bu süreci de merak ediyorum ve neden diye merak ediyorum Siteler API'sı API Konsolu'nda listelenmiyor.Google Sites API desteklenmiyor mu? – cemulate

+0

GData API'leri ve Discovery tabanlı API'ler arasında bir fark var .. Site API'sı bir GData API'sıdır, yalnızca Discovery tabanlı API'lar konsolda Bkz. Http://stackoverflow.com/questions/ Ayrım hakkında bazı yorumlar için 13981641. – bossylobster