Ważne: to jest stara wersja tej strony. Aby użyć najnowszej wersji, kliknij linki na pasku nawigacyjnym po lewej stronie.
Interfejs API danych Bloggera umożliwia aplikacjom klienckim wyświetlanie i aktualizowanie treści z Bloggera w postaci kanałów interfejsu API danych Google.
Aplikacja kliencka może używać interfejsu Blogger Data API do tworzenia nowych postów na blogu, edytowania i usuwania dotychczasowych postów oraz wysyłania zapytań dotyczących postów na blogu odpowiadających konkretnym kryteriom.
Znajdziesz w nim nie tylko informacje o funkcjach interfejsu API danych Bloggera, ale także przykłady podstawowych interakcji z interfejsem Data API za pomocą biblioteki klienta .NET. Jeśli chcesz dowiedzieć się więcej o protokole opartym na bibliotece, zapoznaj się z sekcją Protokoł w tym przewodniku.
Spis treści
Odbiorców
Ten dokument jest przeznaczony dla programistów, którzy chcą tworzyć aplikacje klienckie .NET, które mogą współpracować z Bloggerem.
W tym dokumencie zakładamy, że rozumiesz ogólne pomysły związane z protokołem interfejsów API danych Google.
Informacje o klasach i metodach dostępnych w bibliotece klienta znajdziesz w dokumentacji interfejsu API biblioteki klienta .NET. Ogólne informacje o interfejsie API danych Bloggera znajdziesz w przewodniku po protokołach.
Pierwsze kroki
Aby uzyskać pomoc w konfigurowaniu biblioteki klienta, przeczytaj Przewodnik dla początkujących.
Aby korzystać z biblioteki klienta .NET, potrzebujesz środowiska wykonawczego .NET 1.1. Musisz też być na bieżąco ze wszystkimi poprawkami. Po pobraniu biblioteki klienta znajdziesz biblioteki DLL, których potrzebujesz, aby rozpocząć pracę w podkatalogu lib/Release
dystrybucji.
Tworzenie konta w Bloggerze
Jeśli chcesz, możesz założyć konto w Bloggerze na potrzeby testów. Blogger korzysta z kont Google, więc jeśli masz już konto Google, masz wszystko gotowe.
Uruchamianie przykładowego kodu
W pełni działający przykładowy klient, który zawiera cały przykładowy kod widoczny w tym dokumencie, jest dostępny w projekcie biblioteki klienta .NET. Przykład znajdziesz na stronie /trunk/clients/cs/samples/blogger/ConsoleSample.cs na karcie Źródło repozytorium SVN.
Zanim skompilujesz i uruchomisz tę próbkę, zaktualizuj wartości username
, password
, blogName
i postId
, podając odpowiednie wartości. Wartości username
i password
reprezentują dane logowania, które są używane do logowania się w Bloggerze. Wartość blogName
to początek adresu URL Twojego bloga blogspota.
Przykładowy klient wykonuje kilka operacji na blogu, aby pokazać, jak można korzystać z interfejsu Blogger Data API.
Aby połączyć przykłady w tym dokumencie do własnego kodu, potrzebujesz 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 masz dostęp do kanałów publicznych i prywatnych. Publiczne kanały nie wymagają uwierzytelniania, ale są tylko do odczytu. Jeśli chcesz zmodyfikować blogi, klient musi uwierzytelnić się przed wysłaniem żądania prywatnych kanałów. Może uwierzytelniać się na jeden z 2 sposobów: za pomocą serwera proxy AuthSub lub ClientLogin, za pomocą nazwy użytkownika i hasła.
Więcej ogólnych informacji o uwierzytelnianiu za pomocą interfejsów Google Data API 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 ani hasła użytkownika Bloggera. Zamiast tego klient otrzymuje specjalne tokeny uwierzytelniania, które pozwalają klientowi działać w imieniu konkretnego użytkownika. Więcej informacji znajdziesz w dokumentacji AuthSub.
Gdy użytkownik po raz pierwszy odwiedzi Twoją aplikację, nie zostanie on jeszcze uwierzytelniony. W takim przypadku musisz wyświetlić pewne informacje i link kierujący użytkownika na stronę Google, aby uwierzytelnić prośbę o dostęp do bloga.
Załóżmy, że na stronie masz zdefiniowany ten 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 te parametry (odpowiadają parametrom zapytania używanym przez moduł obsługi AuthSubRequest):
- dalej
- Adres URL strony, na którą Google ma przekierować użytkownika po uwierzytelnianiu.
- zakres
- Wskazuje, że aplikacja żąda tokena dostępu do kanałów Bloggera. Zakres zakresu do użycia to
http://www.blogger.com/feeds/
(oczywiście zakodowany na potrzeby adresu URL). - Bezpieczny
- Wskazuje, czy klient żąda bezpiecznego tokena.
- sesja
- Wskazuje, czy zwrócony token można wymienić na token wielokrotnego użytku (sesja).
W powyższym przykładzie podano wywołanie, które nie wymaga bezpiecznego tokena (wartość secure
wynosi false
). Powstały 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 prowadzący do witryny Google i uwierzytelnia się na koncie Google.
Gdy użytkownik się uwierzytelni, system AuthSub przekierowuje go do adresu URL określonego w parametrze zapytania next
AuthSubRequest. System AuthSub dodaje 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 na adres URL, który wygląda tak:
http://www.example.com/RetrieveToken?token=yourAuthToken
Ta wartość odpowiada pojedynczemu tokenowi AuthSub. 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 przekazujesz token jednorazowy do metody exchangeForSessionToken
wraz z null
(w trybie niezarejestrowanym) lub prywatnym (w przypadku trybu zarejestrowanego), a interfejs AuthSub zwraca token sesji. Więcej informacji o zarejestrowanych aplikacjach i kluczach prywatnych znajdziesz w sekcji "Podpisywanie żądań w dokumentacji AuthSub.
Aplikacja może następnie użyć wartości tokena sesji w kolejnych interakcjach z Bloggerem. Aby wskazać bibliotekę klienta .NET, aby automatycznie wysyłała nagłówek autoryzacji (zawierający token sesji) przy każdym żądaniu:
GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp"); authFactory.Token = SessionsessionToken.ToString(); Service service = new Service(authFactory.ApplicationName); service.RequestFactory = authFactory;
Uwierzytelnianie nazwy użytkownika i hasła klienta
Użyj uwierzytelniania ClientLogin, jeśli klient jest oddzielnym klientem (instalowanym przez klienta (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";
W powyższym fragmencie kodu przekazujemy do konstruktora Service
dwa parametry. Pierwszy parametr to nazwa usługi, z którą chcesz współpracować. Drugi parametr to nazwa aplikacji w formacie companyName-applicationName-versionID. Ustawiamy też Service.RequestFactory
w taki sposób, aby używać konta typu GOOGLE
tylko po to, aby umożliwić prawidłowe uwierzytelnianie użytkowników G Suite.
Więcej informacji o uwierzytelnianiu za pomocą ClientLogin, w tym przykładowych żądaniach i odpowiedziach, znajdziesz w dokumentacji dotyczącej uwierzytelniania zainstalowanych aplikacji.
Uwaga: użyj tego samego tokena dla wszystkich żądań w określonej sesji. Nie zdobywaj nowego tokena dla każdego żądania Bloggera.
Uwaga: jak opisano w dokumentacji ClientLogin, żądanie uwierzytelniania może się nie powieść i zażądać testu CAPTCHA. Jeśli chcesz, aby test CAPTCHA był przeprowadzany i obsługiwany przez tę funkcję, wyślij użytkownika na adres https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(zamiast na adres URL obsługi CAPTCHA podany w dokumentacji ClientLogin).
Pobieranie listy blogów
Interfejs Blogger Data API zapewnia kanał z listą blogów wybranego użytkownika. Ten kanał jest nazywany „"metafeed."
Przykładowy kod używa uwierzytelnionego obiektu Service
do pobrania metatagu, a następnie drukuje każdy tytuł 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 w metodzie getFeed
. Jest to domyślny adres URL metatagu, który zawiera listę blogów aktualnie uwierzytelnionego użytkownika.
Aby uzyskać dostęp do kanału innego użytkownika, możesz umieścić w metatagu adres URL identyfikatora użytkownika 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 postów w blogach oraz tworzenie wersji roboczych wpisów.
Wszystkie te przykłady zakładają, że masz uwierzytelniony obiekt Service
.
Uwaga: ustawianie niestandardowego autora postów jest obecnie niemożliwe. Wszystkie nowe wpisy będą wyglądać tak, jakby zostały utworzone przez aktualnie uwierzytelnionego użytkownika.
Publikowanie posta na blogu
Aby opublikować nowe posty, możesz użyć biblioteki klienta .NET.
Najpierw utwórz obiekt AtomEntry
reprezentujący posta 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 publikacji 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
pobiera adres URL posta w usłudze jako parametr.
Następnie metoda zwraca wpis zapisany w Bloggerze. Zwrócony wpis to taki, który został wysłany, 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 referencyjnej protokołu API danych Google.
Tworzenie wersji roboczej posta na blogu
Wersje robocze postów są tworzone w taki sam sposób jak posty publiczne, ale musisz ustawić atrybut draft
obiektu AtomEntry
. Powyższy post 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);
Możesz zmienić istniejącego posta w blogu w opublikowany post, pobierając wersję roboczą posta, ustawiając atrybut wersji roboczej na fałsz, a następnie aktualizując posta. W kolejnych 2 sekcjach omówimy pobieranie i aktualizowanie postów.
Pobieram posty
W sekcjach poniżej opisujemy, jak pobrać listę postów na blogu z parametrami zapytania i bez nich.
Do zapytań dotyczących publicznych kanałów Bloggera możesz wysyłać zapytania bez uwierzytelniania. W związku z tym nie musisz ustawiać danych logowania ani uwierzytelniać się w AuthSub przed pobieraniem postów z publicznego bloga.
Pobieranie wszystkich postów na blogu
Aby pobrać posty użytkownika, użyj tej samej metody getFeed
w celu pobrania metatagu kanału, ale tym razem wyślij URL kanału:
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 z wykorzystaniem parametrów zapytania
Interfejs API danych Bloggera umożliwia żądanie zestawu wpisów spełniających określone kryteria, takich jak żądania postów opublikowanych na blogu lub opublikowanych w danym zakresie dat. 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 właściwości MinPublication
i MaxPublication
obiektu FeedQuery
.
Ten fragment kodu zawiera tytuł każdego posta opublikowanego między czasem rozpoczęcia a czasem 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 kanału postów, który był 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) lubrss
. - /category
- Określ kategorie (zwane też etykietami), aby filtrować wyniki pliku danych. Na przykład
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
zwraca wpisy z etykietamiFritz
iLaurie
. - wyniki-maksymalne
- Maksymalna liczba elementów do zwrócenia.
- uporządkowane według
- Kolejność, w jakiej będą zwracane wpisy, np.
lastmodified
(domyślnie),starttime
lubupdated
. - opublikowanych, minut:-max
- Limity dat publikacji wpisów.
- indeks-początkowy
- Indeks oparty na 1 pierwszym wyniku do pobrania (na potrzeby stronicowania).
- update-min, update-max,
- Ograniczenia dotyczące dat aktualizacji wpisu. Te parametry zapytania są ignorowane, chyba że parametr
orderby
jest ustawiony naupdated
.
Więcej informacji o parametrach zapytań znajdziesz w Przewodniku po interfejsach API danych Bloggera i w przewodniku po interfejsach Google Data API.
Aktualizowanie postów
Aby zaktualizować istniejącego posta na blogu, najpierw pobierz wpis, który chcesz zaktualizować, zmodyfikuj go, a następnie wyślij do Bloggera za pomocą metody Update()
. Ten fragment kodu powoduje zmianę tytułu posta na blogu przy założeniu, ż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 nowy wpis. Aby zaktualizować pozostałe właściwości, po prostu ustaw je w obiekcie AtomEntry
przed wywołaniem funkcji 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 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 (także 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 komentarze można publikować tylko na blogu należącym do uwierzytelnionego użytkownika.
Uwaga: ustawianie autora niestandardowego dla komentarzy nie jest obecnie obsługiwane. Wszystkie nowe komentarze będą wyglądać tak, jakby zostały utworzone przez aktualnie uwierzytelnionego użytkownika.
Pobieranie komentarzy
Możesz pobrać komentarze do konkretnego posta z adresu URL kanału komentarzy:
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 ze wszystkich postów, korzystając z adresu URL kanału komentarzy:
http://www.blogger.com/feeds/blogID/comments/default
Usuwanie komentarzy
Aby usunąć komentarz, wywołaj metodę Delete()
w istniejącym obiekcie AtomEntry
komentarzy:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }