Przewodnik dla programistów: .NET

Ważne: to jest stara wersja tej strony. Aby uzyskać najnowszą wersję, użyj linków na pasku nawigacyjnym po lewej stronie.

Interfejs API danych Bloggera pozwala aplikacjom klienckim wyświetlać i aktualizować treści z Bloggera w postaci kanałów interfejsu API danych Google.

Aplikacja kliencka Bloggera może używać interfejsu API danych Bloggera do tworzenia nowych postów na blogu, edytowania i usuwania istniejących postów, a także wysyłania zapytań o posty spełniające określone kryteria.

Poza omówieniem możliwości interfejsu API danych Bloggera w tym dokumencie przedstawiamy przykłady podstawowych interakcji interfejsu Data API z wykorzystaniem biblioteki klienta.NET. Jeśli chcesz dowiedzieć się więcej o podstawowym protokole używanym w bibliotece, zapoznaj się z sekcją Protokół w tym przewodniku dla programistów.

Spis treści

Odbiorcy

Ten dokument jest przeznaczony dla programistów chcących pisać aplikacje klienckie .NET, które mogą współpracować z Bloggerem.

Zakładamy w nim, że rozumiesz ogólne koncepcje protokołu interfejsów API danych Google.

Informacje o klasach i metodach udostępnianych przez bibliotekę klienta znajdziesz w dokumentacji interfejsu API biblioteki klienta.NET. Ogólne informacje o interfejsie API danych Bloggera znajdziesz w Przewodniku po protokole.

Pierwsze kroki

Jeśli potrzebujesz pomocy przy konfigurowaniu biblioteki klienta, zapoznaj się z przewodnikiem dla początkujących.

Aby korzystać z biblioteki klienta .NET, musisz mieć środowisko wykonawcze .NET w wersji 1.1. Musisz też być na bieżąco ze wszystkimi poprawkami. Po pobraniu biblioteki klienta w podkatalogu lib/Release dystrybucji znajdziesz pliki DLL potrzebne do rozpoczęcia.

Tworzenie konta w Bloggerze

Aby przeprowadzić testy, możesz założyć konto Bloggera. Blogger korzysta z kont Google, więc jeśli już masz konto Google, nie musisz nic robić.

Uruchamianie przykładowego kodu

W projekcie biblioteki klienta .NET dostępny jest pełny działający przykładowy klient zawierający cały przykładowy kod pokazany w tym dokumencie. Znajdziesz go pod adresem /trunk/clients/cs/samples/blogger/ConsoleSample.cs na karcie Źródło repozytorium SVN.

Przed skompilowaniem i uruchomieniem tej próbki zaktualizuj wartości username, password, blogName i postId odpowiednimi wartościami. Wartości username i password reprezentują dane logowania użyte do zalogowania się w Bloggerze. Wartość blogName to początek adresu URL bloga.

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

Aby skompilować własny kod z przykładów z tego dokumentu, potrzebujesz 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ć przed wysłaniem prośby o dostęp do kanałów prywatnych. Może uwierzytelniać się z użyciem 2 sposobów: uwierzytelniania serwera proxy AuthSub lub uwierzytelniania ClientLogin przy użyciu nazwy użytkownika i hasła.

Więcej ogólnych informacji o uwierzytelnianiu za pomocą interfejsów API danych Google znajdziesz w dokumentacji uwierzytelniania.

Uwierzytelnianie serwera proxy AuthSub

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

Gdy użytkownik po raz pierwszy odwiedza Twoją aplikację, nie jest jeszcze uwierzytelniony. W takim przypadku musisz podać informacje i link przekierowujący użytkownika do strony Google, aby uwierzytelnić prośbę o dostęp do jego blogów.

Załóżmy, że na stronie jest zdefiniowany następujący hiperlink ASP:

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

Następnie, aby utworzyć adres URL AuthSubRequest dla aplikacji, wywołaj bibliotekę klienta .NET 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 następujące parametry (odpowiadające parametrom zapytania używanym przez moduł obsługi AuthSubRequest):

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

Powyższy przykład to wywołanie, które nie wysyła żądania bezpiecznego tokena (wartość secure wynosi false). Powstały 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 się na swoim koncie Google.

Gdy użytkownik się uwierzytelni, system AuthSub przekieruje go na adres URL podany w parametrze zapytania next adresu URL AuthSubRequest. System AuthSub dołącza do tego adresu URL token uwierzytelniania jako wartość parametru zapytania token. Dlatego token jest dostępny jako zmienna w obiekcie Request.QueryString na stronie ASP. Użytkownik zostaje przekierowany do adresu URL, który wygląda tak:

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

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

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

Musisz przekazać jednorazowy token do metody exchangeForSessionToken wraz z null (w przypadku trybu niezarejestrowanego) lub kluczem prywatnym (w trybie zarejestrowanym), a interfejs AuthSub zwraca token sesji. Więcej informacji o zarejestrowanych aplikacjach i kluczach prywatnych znajdziesz w sekcji „Signing requests” (Żądania podpisywania) w dokumentacji AuthSub.

Aplikacja może następnie używać wartości tokena sesji w kolejnych interakcjach z Bloggerem. Aby umożliwić bibliotece klienta .NET automatyczne wysyłanie nagłówka autoryzacji (zawierającego token sesji) przy każdym żądaniu, 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

Użyj uwierzytelniania ClientLogin, jeśli klient jest samodzielnym, „zainstalowanym” klientem „zainstalowanym” przez pojedynczego użytkownika (np. aplikacją komputerową). Ustaw dane logowania 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";

We fragmencie kodu powyżej przekazujemy 2 parametry do konstruktora Service. Pierwszym z nich jest nazwa usługi, z którą chcemy wejść w interakcję. Drugim parametrem jest nazwa aplikacji w formularzu companyName-applicationName-versionID. Ustawiliśmy też Service.RequestFactory tak, aby używał tylko typu konta GOOGLE w celu umożliwienia prawidłowego uwierzytelniania użytkowników G Suite.

Więcej informacji o uwierzytelnianiu ClientLogin, w tym przykładowe żądania i odpowiedzi, znajdziesz w dokumentacji uwierzytelniania zainstalowanych aplikacji.

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

Uwaga: zgodnie z opisem w dokumentacji ClientLogin może się zdarzyć, że żądanie uwierzytelnienia się nie powiedzie i zostanie wykonane zadanie CAPTCHA. Jeśli Google ma uruchamiać i obsługiwać test CAPTCHA, wyślij użytkownikowi adres https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (a nie adres URL obsługi CAPTCHA podany w dokumentacji ClientLogin).

Pobieranie listy blogów

Interfejs API danych Bloggera to kanał z listą blogów konkretnego użytkownika. Kanał ten jest nazywany „metakanałem”.

Poniższy przykładowy kod pobiera metadane z uwierzytelnionego obiektu Service, a następnie wyświetla tytuł 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. Jest to domyślny adres URL metakanału; zwraca listę blogów aktualnie uwierzytelnionego użytkownika. Aby uzyskać dostęp do kanału innego użytkownika, możesz w adresie URL metakanału umieścić jego identyfikator w miejscu default. Identyfikator użytkownika to ciąg 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, a także tworzenie wersji roboczych wpisów.

W poniższych przykładach zakładamy, że masz uwierzytelniony obiekt Service.

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

Publikowanie posta na blogu

Za pomocą biblioteki klienta .NET możesz publikować nowe wpisy w blogu.

Najpierw utwórz obiekt AtomEntry reprezentujący 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. Zwrócony wpis jest taki sam jak ten wysłany przez Ciebie, ale zawiera też różne elementy dodane przez Bloggera, takie jak identyfikator posta.

Jeśli z jakiegoś powodu żądanie się nie powiedzie, Blogger może zwrócić inny kod stanu. Informacje o kodach stanu znajdziesz w dokumentacji protokołu Google Data API.

Tworzenie wersji roboczej posta na blogu

Wersje robocze postów tworzy się tak samo jak posty publiczne, ale musisz ustawić atrybut draft obiektu AtomEntry. Powyższy post można utworzyć jako wersję roboczą, dodając wyróżniony 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);

Możesz przekształcić istniejącą wersję roboczą posta na blogu w opublikowanego posta. W tym celu pobierz jego wersję roboczą, ustaw wartość atrybutu wersji roboczej na wartość Fałsz, a następnie zaktualizuj posta. Pobieranie i aktualizowanie postów zostanie omówione w następnych dwóch sekcjach.

Pobieram posty

W poniższych sekcjach opisano, jak pobrać listę postów na blogu z parametrami zapytania i bez nich.

Możesz wysyłać zapytania dotyczące publicznego kanału Bloggera bez uwierzytelniania. W związku z tym przed pobraniem postów z bloga publicznego nie musisz konfigurować danych logowania ani wykonywać uwierzytelniania AuthSub.

Pobieranie wszystkich postów z bloga

Aby pobrać posty użytkownika, wywołaj tę samą metodę getFeed, która została użyta do pobrania metakanału blogów, ale tym razem wyślij adres URL kanału z postami 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 API danych Bloggera umożliwia żądanie zbioru wpisów spełniających określone kryteria, na przykład żądania postów na blogu opublikowanych lub zaktualizowanych w wybranym zakresie dat. W tym celu utwórz obiekt FeedQuery i przekaż go do metody Service.Query().

Aby np. wysłać zapytanie dotyczące zakresu dat, ustaw elementy MinPublication i MaxPublication obiektu FeedQuery. Ten fragment kodu umożliwia wydrukowanie tytułu każdego posta na blogu opublikowanego między podaną godziną rozpoczęcia i 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 API danych Bloggera obsługuje następujące parametry zapytania:

alternatywnych
Typ pliku danych do zwrócenia, na przykład atom (domyślny) lub rss.
/category
Określ kategorie (nazywane też etykietami), aby filtrować wyniki z pliku danych. Na przykład funkcja http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie zwraca wpisy z etykietami Fritz i Laurie.
max-results
Maksymalna liczba wpisów do zwrócenia.
Orderby
Kolejność zwracania wpisów, na przykład lastmodified (domyślna), 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).
minimalna aktualizacja, maks. liczba aktualizacji
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 i w Przewodniku po interfejsach API danych Google.

Aktualizuję posty

Aby zaktualizować istniejącego posta na blogu, najpierw pobierz wpis, który chcesz zaktualizować, następnie zmodyfikuj i wyślij do Bloggera za pomocą metody Update() tego wpisu. Ten fragment kodu zmienia tytuł wpisu na blogu przy założeniu, że ten wpis został 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 wartość AtomEntry zawierającą całego zaktualizowanego posta. Aby zaktualizować inne właściwości, ustaw je w obiekcie AtomEntry przed wywołaniem Update().

Uwaga: obecnie nie można zmieniać danych o autorze powiązanych z postami.

Usuwam posty

Aby usunąć posta, wywołaj metodę Delete w istniejącym obiekcie AtomEntry 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 interfejsie internetowym).

Tworzenie komentarzy

Aby opublikować komentarz, utwórz obiekt AtomEntry i wstaw go w następujący 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 publikować komentarze tylko na blogu należącym do uwierzytelnionego użytkownika.

Uwaga: ustawianie niestandardowego autora komentarzy nie jest obecnie obsługiwane. Wszystkie nowe komentarze będą wyświetlane tak, jakby zostały utworzone przez aktualnie uwierzytelnionego użytkownika.

Pobieranie komentarzy

Komentarze do konkretnego posta możesz pobrać za pomocą adresu URL kanału komentarzy pod postem:

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ż uzyskać komentarze do wszystkich postów, używając adresu URL kanału komentarzy bloga:

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

Usuwanie komentarzy

Aby usunąć komentarz, wywołaj metodę Delete() w 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