216 lines
7.7 KiB
Java
216 lines
7.7 KiB
Java
/* Copyright (c) 2008 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
package sample.sidewiki;
|
|
|
|
import com.google.gdata.util.common.base.CharEscapers;
|
|
import com.google.gdata.client.sidewiki.SidewikiService;
|
|
import com.google.gdata.data.Content;
|
|
import com.google.gdata.data.IContent;
|
|
import com.google.gdata.data.ILink;
|
|
import com.google.gdata.data.TextContent;
|
|
import com.google.gdata.data.sidewiki.SidewikiAuthor;
|
|
import com.google.gdata.data.sidewiki.SidewikiEntry;
|
|
import com.google.gdata.data.sidewiki.SidewikiEntryFeed;
|
|
import com.google.gdata.data.sidewiki.SidewikiLink;
|
|
import com.google.gdata.util.AuthenticationException;
|
|
import com.google.gdata.util.ServiceException;
|
|
|
|
import java.io.IOException;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* Demonstrates interactions with the Google Sidewiki Data API's entry feeds
|
|
* using the Java client library.
|
|
*/
|
|
public class SidewikiEntryFeedDemo {
|
|
|
|
// The base URL for all Google Sidewiki feeds.
|
|
private static final String SIDEWIKI_FEEDS_URL_BASE =
|
|
"https://www.google.com/sidewiki/feeds";
|
|
|
|
// The base URL for all Google Sidewiki entries feeds.
|
|
private static final String ENTRIES_FEEDS_URL_BASE =
|
|
SIDEWIKI_FEEDS_URL_BASE + "/entries";
|
|
|
|
// The suffix for Sidewiki entries by author feed format.
|
|
private static final String AUTHORS_FEED_URL_SUFFIX_FORMAT =
|
|
"/author/{author_id}/full?max-results=2";
|
|
|
|
// The suffix for Sidewiki entries for web page feed format.
|
|
private static final String WEBPAGE_FEED_URL_SUFFIX_FORMAT =
|
|
"/webpage/{url}/full?max-results=2";
|
|
|
|
/**
|
|
* Utility classes should not have a public or default constructor.
|
|
*/
|
|
private SidewikiEntryFeedDemo() {
|
|
}
|
|
|
|
/**
|
|
* Returns URL of the feed of entries written by author {@code authorId}.
|
|
*
|
|
* @param authorId author Profile ID
|
|
* @return URL of the feed of entries written by given author
|
|
* @throws MalformedURLException if error happens during URL construction
|
|
*/
|
|
private static URL getEntriesByAuthorFeedUrl(String authorId) throws MalformedURLException {
|
|
return new URL(ENTRIES_FEEDS_URL_BASE
|
|
+ AUTHORS_FEED_URL_SUFFIX_FORMAT.replace("{author_id}", authorId));
|
|
}
|
|
|
|
/**
|
|
* Returns URL of the feed of entries written for web page {@code webpage}.
|
|
*
|
|
* @param webpage unescaped web page URL
|
|
* @return URL of the feed of entries written for given web page
|
|
* @throws MalformedURLException if error happens during URL construction
|
|
*/
|
|
private static URL getEntriesForWebpageFeedUrl(String webpage) throws MalformedURLException {
|
|
return new URL(ENTRIES_FEEDS_URL_BASE
|
|
+ WEBPAGE_FEED_URL_SUFFIX_FORMAT.replace("{url}",
|
|
CharEscapers.uriEscaper().escape(webpage)));
|
|
}
|
|
|
|
/**
|
|
* Prints Sidewiki entries in the feed specified by the given URL.
|
|
*
|
|
* @param service an authenticated SidewikiService object
|
|
* @param feedUrl the URL of a Sidewiki entry feed to retrieve
|
|
* @throws IOException if there is a problem communicating with the server
|
|
* @throws ServiceException if the service is unable to handle the request
|
|
* @return a set of author IDs who wrote entries found in given feed
|
|
*/
|
|
private static Set<String> printSidewikiEntries(SidewikiService service, URL feedUrl)
|
|
throws IOException, ServiceException {
|
|
Set<String> authors = new HashSet<String>();
|
|
|
|
// Send the request and receive the response.
|
|
SidewikiEntryFeed resultFeed = service.getFeed(feedUrl, SidewikiEntryFeed.class);
|
|
|
|
// Print each Sidewiki entry.
|
|
System.out.println(resultFeed.getTitle().getPlainText());
|
|
|
|
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
|
|
SidewikiEntry entry = resultFeed.getEntries().get(i);
|
|
printEntry(entry);
|
|
SidewikiAuthor author = (SidewikiAuthor) entry.getAuthors().get(0);
|
|
authors.add(author.getResourceId().getValue());
|
|
}
|
|
return authors;
|
|
}
|
|
|
|
/**
|
|
* Returns plain text representation of content {@code c}.
|
|
*
|
|
* @param c content object to convert to plain text
|
|
* @return content string or "{@code null}" if {@code c} is {@code null}
|
|
*/
|
|
private static String contentToString(Content c) {
|
|
if (c == null) {
|
|
return "null";
|
|
}
|
|
switch (c.getType()) {
|
|
case IContent.Type.TEXT:
|
|
return ((TextContent) c).getContent().getPlainText();
|
|
default:
|
|
return "(" + c.getType() + ")";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Prints Sidewiki entry to standard output, including its author,
|
|
* title and content.
|
|
*
|
|
* @param entry Sidewiki entry to print
|
|
*/
|
|
private static void printEntry(SidewikiEntry entry) {
|
|
SidewikiAuthor author = (SidewikiAuthor) entry.getAuthors().get(0);
|
|
System.out.println("Sidewiki entry by " + author.getName() + " about \""
|
|
+ entry.getLink(SidewikiLink.Rel.ORIGINAL_URL, ILink.Type.HTML).getHref() + "\":\n"
|
|
+ entry.getTitle().getPlainText() + "\" - \""
|
|
+ contentToString(entry.getContent()) + "\"\n");
|
|
}
|
|
|
|
/**
|
|
* Instantiates a SidewikiService object and uses the command line arguments
|
|
* to authenticate. The SidewikiService object is used to demonstrate
|
|
* interactions with the Google Sidewiki Data API's feeds.
|
|
*
|
|
* @param args must be length 3 and contain a valid username/password and web page url
|
|
*/
|
|
public static void main(String[] args) {
|
|
// Set username and password from command-line arguments.
|
|
if (args.length != 3) {
|
|
usage();
|
|
return;
|
|
}
|
|
|
|
String userName = args[0];
|
|
String userPassword = args[1];
|
|
String webpage = args[2];
|
|
|
|
// Create SidewikiService and authenticate using ClientLogin.
|
|
SidewikiService service = new SidewikiService("demo-SidewikiEntryFeedDemo-1");
|
|
|
|
try {
|
|
service.setUserCredentials(userName, userPassword);
|
|
} catch (AuthenticationException e) {
|
|
// Invalid credentials
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
|
|
// Demonstrate retrieving Sidewiki entries written for web page or by some author.
|
|
try {
|
|
System.out.println("Entries for web page \"" + webpage + "\":");
|
|
URL webpageFeedUrl = getEntriesForWebpageFeedUrl(webpage);
|
|
Set<String> authorIds = printSidewikiEntries(service, webpageFeedUrl);
|
|
|
|
// Print entries written by each author found.
|
|
for (String authorId : authorIds) {
|
|
URL authorEntriesFeedUrl = getEntriesByAuthorFeedUrl(authorId);
|
|
printSidewikiEntries(service, authorEntriesFeedUrl);
|
|
}
|
|
|
|
// Print logged in user Sidewiki entries by using "me" keyword.
|
|
System.out.println("My Sidewiki entries:");
|
|
URL myEntriesFeedUrl = getEntriesByAuthorFeedUrl("me");
|
|
printSidewikiEntries(service, myEntriesFeedUrl);
|
|
} catch (IOException e) {
|
|
// Communications error.
|
|
System.err.println("There was a problem communicating with the service.");
|
|
e.printStackTrace();
|
|
} catch (ServiceException e) {
|
|
// Server side error.
|
|
System.err.println("The server had a problem handling your request.");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Prints the command line usage of this sample application.
|
|
*/
|
|
private static void usage() {
|
|
System.out.println("Syntax: SidewikiEntryFeedDemo <username> <password> <web page url>");
|
|
System.out.println("\nPrints entries written for given web page. "
|
|
+ "The username and password are used for authentication.");
|
|
}
|
|
}
|