L'API Blogger Data consente alle applicazioni client di visualizzare e aggiornare i contenuti di Blogger sotto forma di feed dell'API di dati di Google.
L'applicazione client può utilizzare l'API Blogger Data per creare nuovi post del blog, modificare o eliminare quelli esistenti e eseguire query sui post del blog che soddisfano determinati criteri.
Oltre a fornire alcune informazioni sulle funzionalità dell'API Data di Blogger, questo documento fornisce esempi di interazioni di base con l'API Data utilizzando la libreria client di Python. Se vuoi saperne di più sul protocollo di base utilizzato dalla libreria, consulta la sezione Protocollo di questa guida per gli sviluppatori.
Sommario
Pubblico
Questo documento è rivolto ai programmatori che vogliono scrivere applicazioni client Python in grado di interagire con Blogger.
Questo documento presuppone che tu comprenda le idee generali alla base del protocollo delle API di dati di Google.
Per informazioni di riferimento generali sull'API Blogger Data, consulta la guida di riferimento del protocollo.
Per iniziare
Per assistenza sulla configurazione della libreria client, consulta la Guida introduttiva.
La libreria client Python richiede Python 2.2 o versioni successive. Dopo aver scaricato la libreria client, dovrai anche scaricare e installare il pacchetto ElementTree.
Creare un account Blogger
Ti consigliamo di creare un account Blogger a scopo di test. Blogger utilizza gli Account Google, quindi se hai già un Account Google, non devi fare altro.
Eseguire il codice di esempio
Un client di esempio completamente funzionante, contenente tutto il codice di esempio mostrato in questo
documento, è disponibile nel file BloggerExample.py
nella directory
gdata-python-client/samples/blogger/
.
Il client di esempio esegue diverse operazioni sul blog fornito per dimostrare l'utilizzo dell'API Blogger Data.
Puoi eseguire il sample con i seguenti argomenti:
python BloggerExample.py --email [email_address] --password [password]
Per utilizzare gli esempi in questo documento nel tuo codice, hai bisogno delle seguenti istruzioni import
:
from gdata import service import gdata import atom
Autenticazione al servizio Blogger
Puoi accedere ai feed pubblici e privati utilizzando l'API Blogger Data. I feed pubblici non richiedono alcuna autenticazione, ma sono di sola lettura. Se vuoi modificare i blog, il tuo cliente deve autenticarsi prima di richiedere i feed privati. Può eseguire l'autenticazione utilizzando uno dei tre approcci:autenticazione OAuth, autenticazione proxy AuthSub o autenticazione di nome utente/password ClientLogin.
Per ulteriori informazioni sull'autenticazione con le API di dati di Google in generale, consulta la documentazione sull'autenticazione.
La maggior parte degli esempi nelle sezioni successive di questo documento presuppone che tu abbia un'istanza GDataService
autenticata.
Autenticazione OAuth
Per la documentazione sull'autenticazione OAuth utilizzando la libreria GData di Python, consulta OAuth nelle librerie client del protocollo Google Data.
Autenticazione proxy AuthSub
L'autenticazione proxy AuthSub viene utilizzata dalle applicazioni web che devono autenticare i propri utenti negli Account Google. L'operatore del sito web e il codice client non hanno accesso al nome utente e alla password dell'utente di Blogger. Il client ottiene invece token AuthSub speciali che gli consentono di agire per conto di un determinato utente. Per informazioni più dettagliate, consulta la documentazione di AuthSub.
Quando un utente visita per la prima volta la tua applicazione, non è ancora stato autenticato. In questo caso, devi mostrare alcune informazioni e un link che indirizzi l'utente a una pagina di Google per autenticare la tua richiesta di accesso ai suoi blog. La libreria client Python fornisce una funzione per generare l'URL della pagina Google. Il codice seguente recupera l'URL della pagina AuthSubRequest:
def GetAuthSubUrl(): next = 'http://www.example.com/welcome.pyc' scope = 'http://www.blogger.com/feeds/' secure = False session = True blogger_service = service.GDataService() return blogger_service.GenerateAuthSubURL(next, scope, secure, session); authSubUrl = GetAuthSubUrl(); print '<a href="%s">Login to your Google account</a>' % authSubUrl
Il metodo GenerateAuthSubURL
accetta i seguenti parametri
(corrispondenti ai parametri di query utilizzati dall'handler AuthSubRequest):
- avanti
- L'URL della pagina a cui Google deve reindirizzare l'utente dopo l'autenticazione.
- ambito
- Indica che l'applicazione sta richiedendo un token per accedere ai feed di Blogger. La stringa di ambito da utilizzare è
http://www.blogger.com/feeds/
(ovviamente codificata come URL). - sicuro
- Indica se il client richiede un token sicuro.
- sessione
- Indica se il token restituito può essere scambiato con un token multiuso (di sessione).
L'esempio riportato sopra mostra una chiamata che non richiede un token sicuro (il valore di secure
è False
). L'URL della richiesta risultante potrebbe avere il seguente aspetto:
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.pyc
L'utente segue il link al sito di Google e si autentica nel proprio Account Google.
Dopo che l'utente ha eseguito l'autenticazione, il sistema AuthSub lo reindirizza all'URL
specificato nel parametro di query next
dell'URL AuthSubRequest. Il sistema AuthSub aggiunge un token di autenticazione a quell'URL come valore del parametro di query token
. Ad esempio:
http://www.example.com/welcome.pyc?token=yourAuthToken
Esistono diversi modi per recuperare il valore del token dall'URL, ad esempio:
import cgi parameters = cgi.FieldStorage() authsub_token = parameters['token']
Questo valore del token rappresenta un token AuthSub monouso. In questo esempio, poiché è stato specificato session = True
, questo token può essere scambiato con un token di sessione AuthSub utilizzando il metodo UpgradeToSessionToken
, che chiama il servizio AuthSubSessionToken
:
blogger_service = service.GDataService() blogger_service.auth_token = authsub_token blogger_service.UpgradeToSessionToken()
In altre parole, passi il token monouso al metodoUpgradeToSessionToken
e l'interfaccia AuthSub restituisce un token di sessione.
La tua applicazione potrà quindi utilizzare il valore del token di sessione nelle interazioni successive con Blogger. La libreria client invia automaticamente il token insieme alle richieste.
Autenticazione tramite nome utente/password ClientLogin
Utilizza l'autenticazione ClientLogin se il client è un client "installato" autonomo per un solo utente (ad esempio un'applicazione desktop). Basta chiamare il metodo ProgrammaticLogin()
sull'istanza GDataService
e tutte le interazioni successive con Blogger verranno autenticate:
blogger_service = service.GDataService('user@example.com', 'secretPassword') blogger_service.source = 'exampleCo-exampleApp-1.0' blogger_service.service = 'blogger' blogger_service.account_type = 'GOOGLE' blogger_service.server = 'www.blogger.com' blogger_service.ProgrammaticLogin()
Nello snippet riportato sopra, abbiamo impostato tre proprietà sull'istanza GDataService
. Il primo è il nome della nostra applicazione nel
formato companyName-applicationName-versionID.
Il secondo è il nome del servizio con cui vogliamo interagire; il terzo è
l'indirizzo del server.
Tieni presente che account_type
è impostato esplicitamente su
GOOGLE
. Se non imposti questo parametro, gli utenti di G Suite non potranno utilizzare correttamente l'API Blogger.
Per ulteriori informazioni sull'autenticazione ClientLogin, incluse richieste e risposte di esempio, consulta la documentazione sull'autenticazione per le applicazioni installate.
Nota: utilizza lo stesso token per tutte le richieste in una determinata sessione; non acquisire un nuovo token per ogni richiesta di Blogger.
Nota: come descritto nella documentazione di ClientLogin, la richiesta di autenticazione potrebbe non riuscire e richiedere una verifica CAPTCHA. Se vuoi che sia Google a emettere e gestire la verifica CAPTCHA, indirizza l'utente all'URL
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(anziché all'URL di gestione del CAPTCHA indicato nella documentazione di ClientLogin).
Recupero di un elenco di blog
L'API Blogger Data fornisce un feed che elenca i blog di un determinato utente; questo feed è noto come "metafeed".
Il seguente codice di esempio utilizza un'istanza GDataService
autenticata per recuperare il metafeed e stampare il titolo di ogni blog.
def PrintUserBlogTitles(blogger_service): query = service.Query() query.feed = '/feeds/default/blogs' feed = blogger_service.Get(query.ToUri()) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text
Prendi nota dell'URL utilizzato dal metodo Get
. Si tratta dell'URL del metafeed predefinito; restituisce un elenco di blog per l'utente autenticato corrente.
Per accedere a un feed per un utente diverso, puoi inserire l'ID utente al posto di
default
nell'URL del metafeed. L'ID utente è la stringa di cifre alla fine dell'URL del profilo dell'utente.
Lo snippet di codice riportato di seguito mostra come estrarre un ID blog dal feed. L'ID blog è necessario per eseguire operazioni di creazione, aggiornamento ed eliminazione su post e commenti. Lo snippet riportato di seguito sceglie il primo blog recuperato per un utente.
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
Nel Sample BloggerExample.py
viene creata una classe BloggerExample
e l'ID blog viene impostato nel costruttore per un facile accesso in un secondo momento. Per la maggior parte degli esempi riportati di seguito in questo documento,
blog_id
viene passato come variabile.
Creare post
L'API Blogger Data consente di creare e pubblicare nuove voci del blog, nonché bozze di voci.
Nota: l'impostazione di un autore personalizzato per i post non è attualmente supportata. Tutti i nuovi post verranno visualizzati come se fossero stati creati dall'utente attualmente autenticato.
Pubblicazione di un post del blog
Puoi utilizzare la libreria client Python per pubblicare nuovi post del blog.
Per prima cosa, crea un'istanza GDataEntry
per rappresentare il post del blog.
Poi puoi impostare il titolo, i contenuti e altri attributi del post del blog.
Infine, utilizza l'istanza GDataService
per inserire il post. Ecco un esempio di come pubblicare un nuovo post del blog:
def CreatePublicPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) blogEntry = CreatePublicPost(blogger_service, blog_id, title='I have the answer', content='Eureka! It is 42!')
Creare una bozza di un post del blog
I post in bozza vengono creati nello stesso modo dei post pubblici, ma devi impostare l'elemento di estensione draft
nell'istanza GDataEntry
. Il post del blog riportato sopra può essere creato come bozza aggiungendo le righe evidenziate:
def CreateDraftPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) control = atom.Control() control.draft = atom.Draft(text='yes') entry.control = control return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) draftEntry = CreateDraftPost(blogger_service, blog_id, title='I have the question', content='What do you get if you multiply six by nine?')
Puoi trasformare una bozza di post del blog esistente in un post pubblicato recuperando la bozza, impostando l'attributo bozza su no
e poi aggiornando il post. Il recupero e l'aggiornamento dei post verranno trattati nelle due sezioni successive.
Recupero dei post
Le sezioni seguenti descrivono come recuperare un elenco di post del blog, con e senza parametri di query.
Puoi eseguire query su un feed pubblico di Blogger senza autenticazione. Pertanto, non è necessario impostare le credenziali o eseguire l'autenticazione AuthSub prima di recuperare i post da un blog pubblico.
Recupero di tutti i post del blog
Per recuperare i post dell'utente, chiama il metodo GetFeed
con l'URL del feed dei post del blog:
def PrintAllPosts(blogger_service, blog_id): feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default') print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
Recupero dei post utilizzando i parametri di query
L'API Blogger Data ti consente di richiedere un insieme di voci che corrispondono a criteri specificati, ad esempio richiedere post del blog pubblicati o aggiornati in un determinato intervallo di date. Per farlo, crea un'istanza Query
e poi chiama il metodo Get()
.
Ad esempio, per inviare una query sull'intervallo di date, imposta le proprietà published_min
e published_min
dell'istanza Query
.
Il seguente snippet di codice stampa il titolo e i contenuti di ogni post del blog
pubblicato tra l'ora di inizio e l'ora di fine specificate:
def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'): query = service.Query() query.feed = '/feeds/' + blog_id + '/posts/default' query.published_min = start_time query.published_max = end_time feed = blogger_service.Get(query.ToUri()) print feed.title.text + " posts between " + start_time + " and " + end_time for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
Tieni presente che l'oggetto Query
viene creato utilizzando lo stesso URL del feed di post utilizzato per recuperare i post.
L'API Blogger Data supporta le seguenti proprietà Query
:
- categorie
- Specifica le categorie (dette anche etichette) per filtrare i risultati del feed. Ad esempio,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
restituisce voci con le etichetteFritz
eLaurie
. Per specificare questa query di categoria nella libreria client Python, puoi utilizzarequery.categories = ['Fritz','Laurie',]
- max_results
- Il numero massimo di voci da restituire.
- published_min, published_max
- I limiti per le date di pubblicazione delle voci.
- start_index
- L'indice a partire da 1 del primo risultato da recuperare (per la paginazione).
- updated_min, updated_max
- I limiti per le date di aggiornamento delle voci. Questi parametri di query vengono ignorati a meno che il parametro
orderby
non sia impostato suupdated
.
Per ulteriori informazioni sui parametri di query, consulta la Guida di riferimento dell'API di dati di Blogger e la Guida di riferimento delle API di dati di Google.
Aggiornamento dei post
Per aggiornare un post del blog esistente, devi prima recuperare la voce da aggiornare, poi modificarla e infine inviarla a Blogger utilizzando il metodo Put
. Il seguente snippet di codice modifica il titolo di un post del blog, supponendo che tu abbia già recuperato il post dal server.
def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'): entry_to_update.title = atom.Title('xhtml', new_title) return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)
Il codice riportato sopra restituisce un GDataEntry
contenente l'intero
post appena aggiornato. Per aggiornare altre proprietà, impostale nell'istanza GDataEntry
prima di chiamare Put
.
Nota: la modifica dei dati dell'autore associati ai post non è attualmente supportata.
Eliminare i post
Per eliminare un post, passa l'URL di modifica del post al metodo Delete
nell'oggetto GDataService
, come segue:
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
Commenti
L'API Blogger Data consente di creare, recuperare ed eliminare i commenti. L'aggiornamento dei commenti non è supportato (e non è disponibile nell'interfaccia web).
Creazione di commenti
Per pubblicare un commento, crea un oggetto GDataEntry
e inseriscilo come segue:
def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'): feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default' entry = gdata.GDataEntry() entry.content = atom.Content(content_type='xhtml', text=comment_text) return blogger_service.Post(entry, feed_uri)
Nota: al momento puoi pubblicare commenti solo su un blog di proprietà dell'utente autenticato.
Nota: l'impostazione di un autore personalizzato per i commenti al momento non è supportata. Tutti i nuovi commenti verranno visualizzati come se fossero stati creati dall'utente attualmente autenticato.
Recupero dei commenti
Puoi recuperare i commenti di un determinato post dall'URL del feed dei commenti del post:
def PrintAllComments(blogger_service, blog_id, post_id): feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default' feed = blogger_service.Get(feed_url) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.updated.text print
In alternativa, puoi recuperare i commenti di tutti i post utilizzando l'URL del feed dei commenti del blog:
http://www.blogger.com/feeds/blogID/comments/default
Eliminazione dei commenti
Per eliminare un commento, passa l'URL di modifica del commento al metodo Delete
nell'oggetto GDataService
come segue:
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)