Ważne: to jest starsza wersja tej strony. Aby pobrać najnowszą wersję, użyj linków w pasku nawigacyjnym po lewej stronie.
Interfejs Blogger Data API umożliwia aplikacjom klienckim wyświetlanie i aktualizowanie treści Bloggera w postaci plików danych Google Data API.
Za pomocą interfejsu Blogger Data API aplikacja klienta może tworzyć nowe posty na blogu, edytować i usuwać istniejące posty oraz wysyłać zapytania o posty spełniające określone kryteria.
Ten dokument zawiera informacje o możliwościach interfejsu Data API w Bloggerze oraz przykłady podstawowych interakcji z interfejsem Data API przy użyciu biblioteki klienta.NET. Jeśli chcesz dowiedzieć się więcej o podstawowym protokole używanym przez bibliotekę, zapoznaj się z sekcją dotyczącą protokołu w tym przewodniku dla deweloperów.
Spis treści
Odbiorcy
Ten dokument jest przeznaczony dla programistów, którzy chcą pisać aplikacje klienckie .NET, które mogą wchodzić w interakcje z Bloggerem.
W tym dokumencie zakładamy, że rozumiesz ogólne założenia protokołu interfejsów Google Data API.
Informacje referencyjne o klasach i metodach biblioteki klienta znajdziesz w dokumentacji biblioteki klienta interfejsu API dla.NET. Ogólne informacje o interfejsie Blogger Data API znajdziesz w przewodniku po protokole.
Pierwsze kroki
Więcej informacji o konfigurowaniu biblioteki klienta znajdziesz w przewodniku Pierwsze kroki.
Aby korzystać z biblioteki klienta .NET, musisz mieć środowisko uruchomieniowe .NET 1.1. Musisz też mieć zainstalowane wszystkie najnowsze poprawki. Po pobraniu biblioteki klienta w podkatalogu lib/Release
dystrybucji znajdziesz potrzebne biblioteki DLL.
Tworzenie konta w Bloggerze
Możesz założyć konto Blogger na potrzeby testowania. Blogger korzysta z kont Google, więc jeśli masz już konto Google, nie musisz nic więcej robić.
Uruchamianie przykładowego kodu
Pełny działający 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
, blogName
i postId
. Wartości username
i password
to dane logowania używane do logowania się w Bloggerze. Wartość blogName
to początek adresu URL bloga w blogspot.
Przykładowy klient wykonuje kilka operacji na podanym blogu, aby zademonstrować korzystanie z interfejsu Blogger Data API.
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
Za pomocą interfejsu Blogger Data API możesz uzyskać dostęp do plików danych publicznych i prywatnych. 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 proxy AuthSub lub uwierzytelniania nazwą użytkownika i hasłem ClientLogin.
Więcej informacji o uwierzytelnianiu za pomocą interfejsów Google Data API znajdziesz w dokumentacji uwierzytelniania.
Uwierzytelnianie proxy AuthSub
Uwierzytelnianie 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 ani hasła użytkownika Bloggera. Zamiast tego klient uzyskuje specjalne tokeny AuthSub, które umożliwiają mu działanie w imieniu konkretnego użytkownika. Więcej szczegółowych informacji znajdziesz w dokumentacji AuthSub.
Gdy użytkownik po raz pierwszy odwiedza Twoją aplikację, nie został jeszcze uwierzytelniony. W takim przypadku musisz wyświetlić pewne informacje i link, który przekieruje użytkownika na stronę Google, gdzie będzie mógł uwierzytelnić Twoje żądanie dostępu do blogów.
Załóżmy, że na Twojej stronie jest zdefiniowany ten hiperlink do strony ASP:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
Następnie, aby utworzyć adres URL AuthSubRequest dla aplikacji, wywołaj bibliotekę klienta .NET w ten 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. Użyj ciągu zakresu
http://www.blogger.com/feeds/
(w formacie zakodowanym na potrzeby adresu URL). - Bezpieczny
- Wskazuje, czy klient prosi o token zabezpieczony.
- sesja
- Wskazuje, czy zwrócony token można zamienić na token wielokrotnego użytku (sesji).
Powyższy przykład pokazuje wywołanie, które nie wymaga bezpiecznego tokena (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 się na swoim koncie Google.
Po uwierzytelnieniu użytkownika system AuthSub przekieruje go na adres URL określony w parametrze zapytania next
adresu URL AuthSubRequest. System AuthSub dołącza do tego adresu URL token uwierzytelniający jako wartość parametru zapytania token
. Dlatego token jest dostępny jako zmienna w obiekcie Request.QueryString
strony ASP. 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,
gdy podano session = true
, ten token można zamienić na
token sesji AuthSub w ten 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
Użyj uwierzytelniania ClientLogin, jeśli Twój klient jest samodzielnym, jednoużytkownikowym klientem „zainstalowanym” (np. aplikacją na komputer). Ustaw poświadczenia 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 formie companyName-applicationName-versionID. Ustawiliśmy też parametr Service.RequestFactory
tak, aby używał tylko typu konta GOOGLE
, aby umożliwić prawidłową 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 do wszystkich żądań w danej sesji. Nie pobieraj nowego tokena dla każdego żądania Bloggera.
Uwaga: jak opisano w dokumentacji ClientLogin, żądanie uwierzytelnienia może zakończyć się niepowodzeniem i wymagać rozwiązania captcha. Jeśli chcesz, aby Google wyświetlał i obsługiwał test CAPTCHA, prześlij użytkownika do https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(zamiast do adresu URL obsługiwanego przez CAPTCHA podanego w dokumentacji ClientLogin).
Pobieranie listy blogów
Interfejs Blogger Data API udostępnia plik danych, który zawiera listę blogów danego użytkownika. Taki plik danych jest nazywany „metaplikiem danych”.
Poniższy przykładowy kod używa uwierzytelnionego obiektu Service
do pobierania metadanych, 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
. 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 to ciąg cyfr na końcu adresu URL profilu użytkownika.
Tworzenie postów
Interfejs Blogger Data API umożliwia tworzenie i publikowanie nowych wpisów na blogu, a także tworzenie ich wersji roboczych.
Wszystkie poniższe przykłady zakładają, że masz uwierzytelniony obiekt Service
.
Uwaga: nie można obecnie ustawić niestandardowego autora postów. Wszystkie nowe posty będą wyglądać 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ć post. 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 przesyłanego pliku usługi.
Następnie metoda zwraca wpis w postaci, w której został zapisany przez Bloggera. Zwrócony wpis jest taki sam jak przesłany, ale zawiera też różne elementy dodane przez Bloggera, takie jak identyfikator wpisu.
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
Posty w postaci wersji roboczych są tworzone w taki sam sposób jak posty publiczne, ale musisz ustawić atrybut draft
obiektu AtomEntry
. Powyższy post na blogu 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);
Aby zmienić istniejący szkic posta na opublikowany, możesz pobrać szkic, ustawić atrybut szkic na false, a następnie zaktualizować post. W następnych 2 sekcjach omówimy pobieranie i aktualizowanie postów.
Pobieranie postów
W sekcjach poniżej znajdziesz instrukcje pobierania listy wpisów na blogu z parametrami zapytania i bez nich.
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 przeprowadzać uwierzytelniania AuthSub.
Pobieranie wszystkich wpisów na blogu
Aby pobrać posty użytkownika, wywołaj tę samą metodę getFeed
, która służy do pobierania metadanych blogów, ale tym razem prześ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 za pomocą parametrów zapytania
Interfejs Blogger Data API umożliwia żądanie zestawu wpisów, które odpowiadają określonym kryteriam, np. żądanie postów na blogu opublikowanych lub zaktualizowanych w określonym przedziale czasowym. Aby to zrobić, utwórz obiekt FeedQuery
i przekaż go do metody Service.Query()
.
Aby na przykład wysłać zapytanie dotyczące zakresu dat, ustaw elementy MinPublication
i MaxPublication
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 tworzony przy użyciu tego samego adresu URL pliku danych postów, który służy do pobierania postów.
Interfejs Blogger Data API obsługuje te parametry zapytania:
- alternatywnych
- Typ pliku danych do zwrócenia, np.
atom
(domyślny) lubrss
. - /category
- Określ kategorie (zwane też etykietami), aby filtrować wyniki w pliku danych. Na przykład
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
zwraca wpisy z etykietamiFritz
iLaurie
. - max-results
- Maksymalna liczba wpisów do zwrócenia.
- orderby
- Kolejność zwracania wpisów, np.
lastmodified
(domyślnie),starttime
lubupdated
. - published-min, published-max
- Granice dat publikacji wpisów.
- start-index
- Indeks pierwszego wyniku, który ma zostać pobrany (dla pobierania stron).
- 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 Blogger Data API oraz w przewodniku po interfejsach Google Data API.
Aktualizowanie postów
Aby zaktualizować istniejący post na blogu, najpierw pobierasz wpis, który chcesz zaktualizować, a potem 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 Blogger Data API umożliwia tworzenie, pobieranie i usuwanie komentarzy. Aktualizowanie komentarzy nie jest obsługiwane (nie jest też dostępne w interfejsie internetowym).
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 dodawać komentarze tylko do bloga należącego do uwierzytelnionego użytkownika.
Uwaga: nie można obecnie ustawić niestandardowego autora komentarzy. Wszystkie nowe komentarze będą wyglądać tak, jakby zostały utworzone przez aktualnie uwierzytelnionego użytkownika.
Pobieranie komentarzy
Komentarze do konkretnego posta możesz pobrać z adresu URL kanału komentarzy do tego posta:
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ż pobrać komentarze do wszystkich postów, korzystając z adresu URL kanału komentarzy bloga:
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(); } }