Guida per gli sviluppatori: .NET

L'API Blogger Data consente alle applicazioni client di visualizzare e aggiornare i contenuti di Blogger sotto forma di feed dell'API dati di Google.

L'applicazione client può utilizzare l'API di dati di Blogger per creare nuovi post del blog, modificare o eliminare i post del blog esistenti e fare query per post di blog che corrispondono a criteri specifici.

Oltre a fornire alcune informazioni sulle funzionalità dell'API di dati di Blogger, il presente documento fornisce esempi di interazioni di base di API di dati utilizzando la libreria client di.NET. Se vuoi saperne di più sul protocollo sottostante utilizzato dalla libreria, consulta la sezione sul protocollo della guida di questo sviluppatore.

Contenuti

Pubblico

Questo documento è destinato ai programmatori che desiderano scrivere applicazioni client .NET in grado di interagire con Blogger.

Questo documento presuppone che tu abbia compreso le idee generali alla base del protocollo API di dati di Google.

Per informazioni di riferimento sulle classi e sui metodi forniti dalla libreria client, consulta il riferimento API della libreria client .NET. Per informazioni di riferimento generali sull'API di dati di Blogger, consulta la guida di riferimento del protocollo.

Per cominciare

Per assistenza sulla configurazione della libreria client, consulta la Guida introduttiva.

Per utilizzare la libreria client .NET, è necessario il runtime .NET 1.1 e dovresti essere sempre aggiornato su tutte le patch. Dopo aver scaricato la libreria client, troverai le DLL di cui hai bisogno per iniziare nella sottodirectory lib/Release della distribuzione.

Creazione di un account Blogger

Ti consigliamo di creare un account Blogger per scopi di test. Blogger utilizza gli Account Google pertanto, se hai già un Account Google, non devi fare altro.

Eseguire il codice campione

Un client di esempio completamente funzionante, contenente tutto il codice di esempio mostrato in questo documento, è disponibile nel progetto della libreria client .NET. L'esempio si trova in /trunk/clients/cs/samples/blogger/ConsoleSample.cs nella scheda Origine del repository SVN.

Prima di compilare ed eseguire questo esempio, aggiorna i valori di username, password, blogName e postId con i valori appropriati. I valori username e password rappresentano le credenziali utilizzate per accedere a Blogger. Il valore blogName è l'inizio dell'URL blogspot del tuo blog.

Il client di esempio esegue diverse operazioni sul blog fornito per dimostrare l'uso dell'API Blogger Data.

Per compilare gli esempi in questo documento nel tuo codice, devi disporre delle seguenti istruzioni using:

using Google.GData.Client;
using System.Net;
using System.Xml;
using System.Text.RegularExpressions;

Autenticazione al servizio Blogger

Puoi accedere ai feed pubblici e privati utilizzando l'API dei dati di Blogger. I feed pubblici non richiedono alcuna autenticazione, ma sono di sola lettura. Se vuoi modificare i blog, il tuo cliente deve eseguire l'autenticazione prima di richiedere i feed privati. Può eseguire l'autenticazione utilizzando uno dei due approcci seguenti: autenticazione del proxy AuthSub o autenticazione del nome utente e della password di ClientLogin.

Per ulteriori informazioni sull'autenticazione con le API di dati di Google in generale, consulta la documentazione sull'autenticazione.

Autenticazione proxy AuthSub

L'autenticazione del proxy AuthSub viene utilizzata dalle applicazioni web che devono autenticare gli 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 invece riceve token AuthSub speciali che consentono al client 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 visualizzare alcune informazioni e un link che indirizza l'utente a una pagina Google per autenticare la richiesta di accesso ai suoi blog.

Supponiamo che nella tua pagina sia definito il seguente link ipertestuale ASP:

<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>

Quindi, per creare l'URL AuthSubRequest per la tua applicazione, effettua una chiamata alla libreria client .NET come segue:

GotoAuthSubLink.Text = "Login to your Google Account";
GotoAuthSubLink.NavigateUrl =
  AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken",
  "http://www.blogger.com/feeds/",
  false,
  true);

Il metodo getRequestUrl accetta i seguenti parametri (corrispondenti ai parametri di ricerca utilizzati dal gestore AuthSubRequest):

avanti
L'URL della pagina a cui Google deve reindirizzare l'utente dopo l'autenticazione.
ambito
Indica che l'applicazione richiede un token per accedere ai feed di Blogger. La stringa dell'ambito da utilizzare è http://www.blogger.com/feeds/ (con codifica URL, ovviamente).
sicuro
Indica se il client richiede un token sicuro.
sessione
Indica se il token restituito può essere scambiato con un token multiuso (sessione).

L'esempio precedente mostra una chiamata che non richiede un token sicuro (il valore di secure è false). L'URL della richiesta risultante potrebbe essere simile al seguente:

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%2FRetrieveToken

L'utente segue il link al sito di Google ed esegue l'autenticazione sul proprio Account Google.

Dopo l'autenticazione dell'utente, il sistema AuthSub li reindirizza all'URL specificato nel parametro di ricerca next dell'URL AuthSubRequest. Il sistema AuthSub aggiunge un token di autenticazione all'URL, come valore del parametro di ricerca token. Pertanto, il token è accessibile come variabile nell'oggetto Request.QueryString della pagina ASP. L'utente viene reindirizzato a un URL simile al seguente:

http://www.example.com/RetrieveToken?token=yourAuthToken

Questo valore token rappresenta un token AuthSub monouso. In questo esempio, poiché session = true è stato specificato, il token può essere scambiato con un token di sessione AuthSub, come segue:

SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);

In altre parole, il token monouso viene inviato al metodo exchangeForSessionToken, insieme a null (per la modalità non registrata) o a una chiave privata (per la modalità registrata) e l'interfaccia AuthSub restituisce un token di sessione. Per ulteriori informazioni sulle applicazioni registrate e le chiavi private, consulta la sezione "Richieste di firma" della documentazione di AuthSub.

L'applicazione può quindi utilizzare il valore del token della sessione nelle interazioni successive con Blogger. Per indicare alla libreria client .NET di inviare automaticamente l'intestazione Authorization (contenente il token di sessione) con ogni richiesta, procedi come segue:

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp");
authFactory.Token = SessionsessionToken.ToString();
Service service = new Service(authFactory.ApplicationName);
service.RequestFactory = authFactory;

Autenticazione nome utente/password ClientLogin

Utilizza l'autenticazione ClientLogin se il client è un client autonomo, "singolo" per utente singolo (come un'applicazione desktop). Imposta le credenziali dell'oggetto di servizio come segue:

Service service = new Service("blogger", "exampleCo-exampleApp-1");
service.Credentials = new GDataCredentials("user@example.com", "secretPassword");
GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory;
factory.AccountType = "GOOGLE";

Nello snippet riportato sopra, trasmettiamo due parametri al costruttore Service. Il primo parametro è il nome del servizio con cui vuoi interagire. Il secondo parametro è il nome dell'applicazione nel formato companyName-applicationName-versionID. Inoltre, impostiamo Service.RequestFactory in modo che utilizzi solo un tipo di account GOOGLE per consentire l'autenticazione corretta per gli utenti di G Suite.

Per ulteriori informazioni sull'autenticazione ClientLogin, incluse le richieste e le 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 Google emetta e gestisca la verifica CAPTCHA, invia l'utente a https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (anziché all'URL di gestione CAPTCHA fornito nella documentazione ClientLogin).

Recupero di un elenco di blog in corso...

L'API di dati di Blogger fornisce un feed che elenca i blog per un determinato utente; tale feed è noto come "metafeed".

Il seguente codice di esempio utilizza un oggetto Service autenticato per recuperare il metafeed, quindi stampa il titolo di ogni blog.

query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
AtomFeed feed = null;
try
{
  feed = service.Query(query);
  foreach (AtomEntry entry in feed.Entries)
  {
    Console.WriteLine("Blog Title: " + entry.Title.Text);
  }
}

Prendi nota dell'URL utilizzato dal metodo getFeed. Questo è l'URL predefinito del metafeed, che restituisce un elenco di blog per l'utente attualmente autenticato. Per accedere a un feed per un altro utente, puoi inserire l'ID dell'utente al posto di default nell'URL del metafeed. L'ID utente è la stringa di cifre che si trova alla fine dell'URL del profilo dell'utente.

Creazione di post

L'API Blogger Data consente di creare e pubblicare nuove voci di blog, nonché di creare bozze di voci.

Tutti i seguenti esempi presuppongono che tu abbia un oggetto Service autenticato.

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.

Pubblicare un post del blog

Puoi utilizzare la libreria client .NET per pubblicare nuove voci del blog.

In primo luogo, crea un oggetto AtomEntry per rappresentare il post del blog. Quindi, potrai impostare il titolo, i contenuti e altri attributi del post del blog. Infine, usa l'oggetto Service per inserire il post. Ecco un esempio di come pubblicare un nuovo post del blog:

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = "Marriage!";
newPost.Content = new AtomContent();
newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
  "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
  "<p>He is the last man on earth I would ever desire to marry.</p>" +
  "<p>Whatever shall I do?</p>" +
  "</div>";
newPost.Content.Type = "xhtml";

Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);

Il metodo Insert considera l'URL del post del servizio come parametro. Quindi il metodo restituisce la voce così come è stata archiviata da Blogger. La voce restituita è la stessa che hai inviato, ma contiene anche vari elementi aggiunti da Blogger, ad esempio un ID post.

Se per qualche motivo la tua richiesta non va a buon fine, Blogger potrebbe restituire un codice di stato diverso. Per informazioni sui codici di stato, consulta la documentazione di riferimento del protocollo dell'API di dati di Google.

Creazione di una bozza di post del blog

Le bozze dei post vengono create come i post pubblici, ma devi impostare l'attributo draft dell'oggetto AtomEntry. Il post del blog riportato sopra potrebbe essere creato come bozza aggiungendo la riga evidenziata:

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = "Marriage!";
newPost.Content = new AtomContent();
newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
    "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
    "<p>He is the last man on earth I would ever desire to marry.</p>" +
    "<p>Whatever shall I do?</p>" +
    "</div>";
newPost.Content.Type = "xhtml";
newPost.IsDraft = true;

Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);

Per trasformare una bozza di post di blog esistente in un post pubblicato, recupera la bozza, imposta l'attributo bozza su false e aggiornala. Parleremo del recupero e dell'aggiornamento dei post nelle prossime due sezioni.

Recupero dei post in corso...

Le seguenti sezioni descrivono come recuperare un elenco di post del blog, con e senza parametri di ricerca.

Puoi eseguire query su un feed pubblico di Blogger senza autenticazione. quindi non devi impostare le credenziali o eseguire l'autenticazione AuthSub prima di recuperare i post da un blog pubblico.

Recupero di tutti i post del blog in corso...

Per recuperare i post dell'utente, chiama lo stesso metodo getFeed usato per recuperare il metafeed dei blog, ma questa volta invia l'URL del feed del post del blog:

query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
feed = service.Query(query);
Console.WriteLine(feed.Title.Text);
foreach (AtomEntry entry in feed.Entries)
{
  Console.WriteLine("Entry Title: " + entry.Title.Text);
}

Recupero dei post mediante parametri di ricerca

L'API di dati di Blogger consente di richiedere un set di voci che corrispondono a criteri specifici, come la richiesta di post del blog pubblicati o aggiornati in un determinato intervallo di date. Per farlo, devi creare un oggetto FeedQuery e passarlo al metodo Service.Query().

Ad esempio, per inviare una query sull'intervallo di date, imposta i membri MinPublication e MaxPublication dell'oggetto FeedQuery. Il seguente snippet di codice stampa il titolo di ciascun post del blog pubblicato tra l'ora di inizio e quella di fine specificate:

FeedQuery query = new FeedQuery();
query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
query.MinPublication = new DateTime(2006, 1, 1);
query.MaxPublication = new DateTime(2007, 4, 12);
AtomFeed feed = service.Query(query);
foreach (AtomEntry entry in feed.Entries)
{
  Console.WriteLine("  Entry Title: " + entry.Title.Text);
}

Tieni presente che l'oggetto FeedQuery viene creato utilizzando lo stesso URL del feed del post utilizzato per recuperare i post.

L'API di dati di Blogger supporta i seguenti parametri di ricerca:

alt
Il tipo di feed da restituire, ad esempio atom (impostazione predefinita) o rss.
/category
Specifica le categorie (note anche come etichette) per filtrare i risultati del feed. Ad esempio, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie restituisce le voci con le etichette Fritz e Laurie.
max risultati
Il numero massimo di voci da restituire.
ordina
L'ordine in cui restituire le voci, ad esempio lastmodified (impostazione predefinita), starttime o updated.
min-pubblicato-max-pubblicato
I limiti per le date di pubblicazione delle iscrizioni.
indice-indice
L'indice in base uno del primo risultato da recuperare (per il paging).
min-aggiornato, max-aggiornato
I limiti per le date di aggiornamento delle voci. Questi parametri di ricerca vengono ignorati a meno che il parametro orderby non sia impostato su updated.

Per ulteriori informazioni sui parametri di ricerca, consulta la Guida di riferimento API per i dati di Blogger e la Guida di riferimento per le API di dati Google.

Aggiornamento dei post in corso...

Per aggiornare un post del blog esistente, devi prima recuperare la voce che vuoi aggiornare, quindi modificarla e infine inviarla a Blogger utilizzando il metodo Update() della voce. Il seguente snippet di codice modifica il titolo di una voce di blog, supponendo che tu abbia già recuperato la voce dal server.

static AtomEntry EditEntry(AtomEntry toEdit)
{
  // Edit the entry by changing the Title and calling Update().
  if (toEdit != null)
  {
    toEdit.Title.Text = "Marriage Woes!";
    toEdit = toEdit.Update();
  }
  return toEdit;
}

Il codice precedente restituisce un AtomEntry che contiene l'intero post appena aggiornato. Per aggiornare eventuali altre proprietà, è sufficiente impostarle nell'oggetto AtomEntry prima di chiamare Update().

Nota: la modifica dei dati dell'autore associati ai post non è attualmente supportata.

Eliminazione dei post in corso...

Per eliminare un post, chiama il metodo Delete su un oggetto AtomEntry esistente, in questo modo:

static void DeleteEntry(AtomEntry toDelete)
{
  // Delete the edited entry
  if (toDelete != null)
  {
    toDelete.Delete();
  }
}

Commenti

L'API Blogger Data consente di creare, recuperare ed eliminare i commenti. L'aggiornamento dei commenti non è supportato (né è disponibile nell'interfaccia web).

Creazione di commenti

Per pubblicare un commento, crea un oggetto AtomEntry e inseriscilo come segue:

AtomEntry comment;
comment = new AtomEntry();
comment.Title.Text = "This is my first comment";
comment.Content.Content = "This is my first comment";
Uri commentPostUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/" + entryId + "/comments/default");
postedComment = service.Insert(commentPostUri, comment);

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 non è attualmente supportata. Tutti i nuovi commenti appariranno come se fossero stati creati dall'utente attualmente autenticato.

Recupero dei commenti in corso...

Puoi recuperare i commenti relativi a un determinato post dall'URL del feed dei commenti del post:

static void ListEntryComments(Service service, Uri commentUri)
{
  if (commentUri != null)
  {
    // Retrieve all comments on a blog entry
    FeedQuery query = new FeedQuery();
    query.Uri = commentUri;
    AtomFeed feed = service.Query(query);
    foreach (AtomEntry entry in feed.Entries)
    {
      Console.WriteLine("  Comment Title: " + entry.Title.Text);
    }
  }
}

In alternativa, puoi ottenere i commenti da tutti i post utilizzando l'URL del feed dei commenti del blog:

http://www.blogger.com/feeds/blogID/comments/default

Eliminazione commenti

Per eliminare un commento, richiama il metodo Delete() su un oggetto AtomEntry esistente come questo:

static void DeleteComment(AtomEntry commentEntry)
{
  if (commentEntry != null)
  {
    // Delete the comment.
    commentEntry.Delete();
  }
}

Torna all'inizio