Przewodnik dla programistów: .NET

Ważne: 30 września 2024 r. zakończymy obsługę interfejsu Google Data API w wersji 2.0. Aby zapewnić nieprzerwaną funkcjonalność, zaktualizuj aplikacje, które korzystają z wersji 2.0 Google Data API do najnowszej wersji. Aby uzyskać najnowszą wersję, użyj linków na pasku nawigacyjnym po lewej stronie. Uwaga: chociaż niektóre żądania GET (takie jak posty z informacjami o produktach) będą nadal obsługiwane jako kanał są pewne różnice w działaniu. Szczegółowe informacje znajdziesz tutaj: Centrum pomocy Bloggera.

Interfejs Blogger Data API umożliwia aplikacjom klienckim wyświetlanie i aktualizowanie treści Bloggera w postaci plików danych Google Data API.

Twoja aplikacja kliencka może używać interfejsu Blogger Data API do tworzenia nowych postów na blogu, edytowania lub usuwania dotychczasowych postów na blogu oraz wyszukiwania postów na blogu, które spełniają określone kryteria.

Oprócz przedstawienia nieco informacji na temat możliwości Bloggera Data API, ten dokument zawiera przykłady podstawowych interakcji interfejsu Data API, które wykorzystują bibliotekę klienta .NET, Jeśli chcesz dowiedzieć się więcej o protokole, Więcej informacji znajdziesz w sekcji Protokół w w tym przewodniku programisty.

Spis treści

Odbiorcy

Ten dokument jest przeznaczony dla programistów, którzy chcą napisać klienta .NET które mogą wchodzić w interakcję z Bloggerem.

Zakładamy w nim, że rozumiesz ogólne koncepcje stojące za interfejsami API danych Google .

Informacje referencyjne o klasach i metodach biblioteki klienta znajdziesz w dokumentacji interfejsu API biblioteki klienta dla .NET. Ogólne informacje na temat interfejsu Blogger Data API znajdziesz w przewodniku po protokole.

Pierwsze kroki

Pomoc przy konfigurowaniu biblioteki klienta znajdziesz w artykule Pobieranie Uruchomiony przewodnik

Aby korzystać z biblioteki klienta .NET, musisz mieć środowisko wykonawcze .NET 1.1 oraz powinien być aktualny także dla wszystkich poprawek. Po pobraniu biblioteki klienta w podkatalogu lib/Release dystrybucji znajdziesz potrzebne biblioteki DLL.

Tworzenie konta w Bloggerze

Możesz zarejestrować się konta Bloggera. Blogger korzysta z kont Google, jeśli więc masz już konto Google, wszystko gotowe.

Uruchamianie przykładowego kodu

Pełnofunkcyjny przykładowy klient zawierający cały przykładowy kod pokazany w tym dokumencie jest dostępny w projekcie biblioteki klienta .NET. Plik znajduje się w folderze /trunk/clients/cs/samples/blogger/ConsoleSample.cs na karcie Source (Źródło) w repozytorium SVN.

Przed skompilowaniem i uruchomieniem tego przykładu zaktualizuj wartości parametrów username, password, blogNamepostId. username i Wartości password reprezentują dane logowania używane do logowania Bloggera. Wartość blogName to początek adresu URL bloga w blogspot.

Przykładowy klient wykonuje kilka operacji na udostępnionym blogu, aby zademonstrować użycie interfejsu API danych Bloggera.

Aby skompilować przykłady z tego dokumentu w swój własny kod, musisz użyć tych instrukcji using:

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

Uwierzytelnianie w usłudze Blogger

Interfejs API danych Bloggera umożliwia dostęp zarówno do publicznych, jak i prywatnych kanałów. Publiczne kanały nie wymagają uwierzytelniania, ale są tylko do odczytu. Jeśli chcesz zmodyfikować blogi, Twój klient musi się uwierzytelnić, zanim poprosi o pliki danych prywatnych. Może on uwierzytelniać się na 2 sposoby: za pomocą uwierzytelniania przez serwer proxy AuthSub lub uwierzytelniania za pomocą nazwy użytkownika i hasła ClientLogin.

Więcej informacji o uwierzytelnianiu za pomocą interfejsów Google Data API znajdziesz w dokumentacji dotyczącej uwierzytelniania.

Uwierzytelnianie serwera proxy AuthSub

Uwierzytelnianie proxy AuthSub jest używane przez aplikacje internetowe, które muszą uwierzytelniać użytkowników na kontach Google. Operator witryny i klient kod nie ma dostępu do nazwy użytkownika ani hasła użytkownika Bloggera; Zamiast tego klient uzyskuje specjalne tokeny AuthSub, które umożliwiają działanie w imieniu konkretnego użytkownika. Szczegółowe informacje znajdziesz w dokumentacji AuthSub.

Gdy użytkownik po raz pierwszy odwiedza Twoją aplikację, uwierzytelniono. W tym przypadku musisz wyświetlić informacje i link Kierowanie użytkownika na stronę Google, gdzie zostanie uwierzytelniona prośba o dostęp do swoje blogi.

Załóżmy, że na Twojej stronie jest zdefiniowany ten hiperlink do strony ASP:

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

Następnie utwórz adres URL żądania AuthSubRequest dla aplikacji, tworząc .NET użyj wywołania biblioteki klienta w następujący sposób:

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

Metoda getRequestUrl przyjmuje te parametry (odpowiadające parametrom zapytania używanym przez moduł obsługi AuthSubRequest):

dalej
Adres URL strony, na którą Google powinno przekierować użytkownika po uwierzytelnieniu.
zakres
Wskazuje, że aplikacja prosi o token dostępu do kanałów Bloggera. Ciąg zakresu, którego chcesz użyć, to http://www.blogger.com/feeds/ (oczywiście zakodowany pod adresem URL).
Bezpieczny
Wskazuje, czy klient prosi o token zabezpieczony.
sesja
Wskazuje, czy zwrócony token można wymienić na token wielokrotnego użytku (sesyjny).

Powyższy przykład pokazuje wywołanie, które nie wymaga tokena zabezpieczającego (wartość secure to false). Adres URL żądania może wyglądać tak:

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

Użytkownik klika link do witryny Google i uwierzytelnia swoje konto Google.

Gdy użytkownik się uwierzytelni, system AuthSub przekierowuje go do adresu URL podany w parametrze zapytania next w żądaniu AuthSubRequest Adres URL. System AuthSub dołącza do tego adresu URL token uwierzytelniania, parametru zapytania token. Dlatego dostępna jako zmienna w tagu Request.QueryString strony ASP obiektu. Użytkownik jest przekierowywany do adresu URL o takiej postaci:

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

Ta wartość tokena reprezentuje token AuthSub jednorazowego użytku. W tym przykładzie ponieważ określono session = true, ten token można wymienić na token sesji AuthSub w następujący sposób:

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

Oznacza to, że do metody exchangeForSessionToken przekazujesz token jednorazowego użytku wraz z wartością null (w trybie niezarejestrowanym) lub kluczem prywatnym (w trybie zarejestrowanym). Interfejs AuthSub zwraca token sesji. Więcej informacji o zarejestrowanych aplikacjach i kluczach prywatnych znajdziesz w sekcji „Podpisywanie żądań” dokumentacji AuthSub.

Twoja aplikacja może następnie używać wartości tokena sesji w kolejnych interakcjach z Bloggerem. Aby biblioteka klienta .NET automatycznie wysyłała nagłówek Authorization (zawierający token sesji) z każdym żądaniem, wykonaj te czynności:

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

uwierzytelnianie za pomocą nazwy użytkownika i hasła ClientLogin

Jeśli klient jest samodzielnym, pojedynczym użytkownikiem, użyj uwierzytelniania ClientLogin „zainstalowano” klienta (np. aplikacji komputerowej). Ustaw parametr dane logowania do obiektu usługi w ten sposób:

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

W tym fragmencie kodu przekazujemy 2 parametry do konstruktora klasy Service. Pierwszy parametr to nazwa usługi, z którą chcemy się komunikować. Drugi parametr to nazwa naszej aplikacji w formularzu companyNameapplicationNameversionID. Dodatkowo ustaw Service.RequestFactory tak, aby używał tylko GOOGLE typu konta, aby umożliwić prawidłowe uwierzytelnianie użytkowników G Suite.

Więcej informacji o uwierzytelnianiu za pomocą ClientLogin, w tym przykładowe żądania i odpowiedzi, znajdziesz w dokumentacji Uwierzytelnianie w zainstalowanych aplikacjach.

Uwaga: używaj tego samego tokena dla wszystkich żądań w danej sesji; nie pobierają nowego tokena dla każdego żądania Bloggera.

Uwaga: jak opisano w dokumentacji dotyczącej funkcji ClientLogin, żądanie uwierzytelnienia może zakończyć się niepowodzeniem i wyświetlić prośbę o rozwiązanie CAPTCHA. Jeśli chcesz, aby zadanie CAPTCHA zostało wykonane przez Google, a następnie: wyślij użytkownika do https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (a nie do adresu URL do obsługi CAPTCHA podanego w interfejsie ClientLogin) dokumentacji).

Pobieranie listy blogów

Interfejs API danych Bloggera udostępnia kanał z listą blogów o określonej tematyce user; jest nazywany „metakanałem”.

Ten przykładowy kod korzysta z uwierzytelnionego obiektu Service w celu pobrania metakanału, a następnie wydrukowanie tytułu każdego bloga.

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);
  }
}

Zapisz adres URL używany przez metodę getFeed. To domyślny URL metafeedu; zwraca listę blogów dla aktualnie uwierzytelnionego użytkownika. Aby uzyskać dostęp do pliku danych innego użytkownika, możesz podać jego identyfikator zamiast znaku default w adresie URL metapliku danych. Identyfikator użytkownika jest ciągiem cyfr na końcu adresu URL profilu użytkownika.

Tworzenie postów

Interfejs API danych Bloggera umożliwia tworzenie i publikowanie nowych wpisów na blogu, oraz tworzenie wersji roboczych wpisów.

We wszystkich poniższych przykładach zakładamy, że masz uwierzytelnione Service obiekt.

Uwaga: ustawienie niestandardowego autora postów jest obecnie nieobsługiwane. Wszystkie nowe posty będą wyświetlane tak, jakby zostały utworzone przez: aktualnie uwierzytelnionego użytkownika.

Publikowanie posta na blogu

Aby publikować nowe wpisy na blogu, możesz użyć biblioteki klienta .NET.

Najpierw utwórz obiekt AtomEntry, który będzie reprezentować post na blogu. Następnie możesz ustawić tytuł, treść i inne atrybuty posta na blogu. Na koniec użyj obiektu Service, aby wstawić posta. Oto przykład publikowania nowego posta na blogu:

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);

Metoda Insert przyjmuje jako parametr adres URL posta usługi. Następnie metoda zwraca wpis w takiej postaci, w jakiej został on zapisany w Bloggerze. Wpis jest zwracany przez Ciebie, ale zawiera też różne dodane elementy przez Bloggera, np. identyfikator posta.

Jeśli z jakiegoś powodu nie uda się zrealizować żądania, Blogger może zwrócić inny kod stanu. Informacje o kodach stanu znajdziesz w dokumentacji interfejsu Google Data API.

Tworzenie wersji roboczej posta na blogu

Wersje robocze postów tworzy się tak samo jak posty publiczne, ale musisz skonfigurować atrybut draft obiektu AtomEntry. Blog post powyżej można utworzyć jako wersję roboczą, dodając zaznaczony wiersz:

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);

Aby zmienić istniejący szkic posta na blogu na opublikowany, pobierz szkic, ustaw atrybut szkic na false, a następnie zaktualizuj post. W następnych 2 sekcjach omówimy pobieranie i aktualizowanie postów.

Pobieranie postów

W kolejnych sekcjach opisano sposób pobierania listy postów na blogu, przy czym i bez parametrów zapytania.

Możesz wysyłać zapytania do publicznego kanału Bloggera bez uwierzytelniania. Dlatego przed pobraniem postów z publicznego bloga nie musisz ustawiać danych logowania ani uwierzytelniać się za pomocą AuthSub.

Pobieranie wszystkich wpisów na blogu

Aby pobrać posty użytkownika, wywołaj tę samą metodę getFeed, która została użyta , ale tym razem wyślij adres URL kanału postów na blogu:

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);
}

Pobieranie postów przy użyciu parametrów zapytania

Interfejs Blogger Data API umożliwia żądanie zestawu wpisów, które odpowiadają określonym kryterium, np. żądanie postów z bloga opublikowanych lub zaktualizowanych w określonym przedziale czasowym. Aby to zrobić, utwórz obiekt FeedQuery i przekaż go do metody Service.Query().

Aby np. wysłać zapytanie dotyczące zakresu dat, ustaw MinPublication i MaxPublication elementów obiektu FeedQuery. Ten fragment kodu wyświetla tytuł każdego posta na blogu opublikowanego w okresie od podanego czasu rozpoczęcia do podanego czasu zakończenia:

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);
}

Zwróć uwagę, że obiekt FeedQuery jest utworzony za pomocą tego samego adresu URL kanału postów, który jest używany do pobierania postów.

Interfejs Blogger Data API obsługuje te parametry zapytania:

alternatywnych
Typ pliku danych do zwrócenia, np. atom (domyślny) lub rss.
/category
Określ kategorie (zwane też etykietami), aby filtrować wyniki w pliku danych. Na przykład funkcja http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie zwraca wpisy z etykietami Fritz i Laurie.
maksymalna liczba wyników
Maksymalna liczba wpisów do zwrócenia.
Orderby
Kolejność zwracania wpisów, np. lastmodified (domyślnie), starttime lub updated.
liczba publikacji: minimalna, liczba publikacji – maks.
Granice dat publikacji wpisów.
start-index
Indeks od 1 pierwszego wyniku do pobrania (na potrzeby stronicowania).
updated-min, updated-max
Granice dat aktualizacji wpisów. Te parametry zapytania są ignorowane, chyba że parametr orderby ma wartość updated.

Więcej informacji o parametrach zapytań znajdziesz w przewodniku po interfejsie API danych Bloggera. Przewodnik i Google Przewodnik po interfejsach API danych

Aktualizuję posty

Aby zaktualizować istniejący post na blogu, najpierw pobierasz wpis, który chcesz zaktualizować, a następnie go modyfikujesz i wysyłasz do Bloggera za pomocą metody Update() wpisu. Podany niżej fragment kodu zmienia tytuł wpisu na blogu, zakładając, że został on już pobrany z serwera.

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;
}

Powyższy kod zwraca AtomEntry zawierający cały nowo zaktualizowany post. Aby zaktualizować inne właściwości, po prostu ustaw je w obiekcie AtomEntry przed wywołaniem metody Update().

Uwaga: modyfikowanie danych autora powiązanych z postami nie jest obecnie obsługiwane.

Usuwanie postów

Aby usunąć post, wywołaj metodę Delete w obiekcie AtomEntry, na przykład w ten sposób:

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

Komentarze

Interfejs API danych Bloggera umożliwia tworzenie, pobieranie i usuwanie komentarzy. Aktualizowanie komentarzy nie jest obsługiwane (nie jest też dostępna w przeglądarce) ).

Tworzenie komentarzy

Aby opublikować komentarz, utwórz obiekt AtomEntry i wstaw go w ten sposób:

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);

Uwaga: obecnie możesz tylko publikować komentarze w blogu należącym do uwierzytelnionego użytkownika.

Uwaga: ustawienie niestandardowego autora komentarzy jest obecnie nieobsługiwane. Wszystkie nowe komentarze będą wyglądać tak, jakby zostały utworzone przez aktualnie uwierzytelnionego użytkownika.

Pobieranie komentarzy

Komentarze do posta możesz pobrać z poziomu komentarzy do posta. adres URL kanału:

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);
    }
  }
}

Możesz też wyświetlić komentarze do wszystkich postów, korzystając z kanału komentarzy bloga Adres URL:

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

Usuwanie komentarzy

Aby usunąć komentarz, wywołaj metodę Delete() na istniejącym obiekcie komentarza AtomEntry w ten sposób:

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

Powrót do góry