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
, blogName
i postId
. 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
companyName–applicationName–versionID. 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) lubrss
. - /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 etykietamiFritz
iLaurie
. - maksymalna liczba wyników
- Maksymalna liczba wpisów do zwrócenia.
- Orderby
- Kolejność zwracania wpisów, np.
lastmodified
(domyślnie),starttime
lubupdated
. - 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(); } }