jtulach@0: package cz.xelfi.feedbook; jtulach@0: jtulach@1: import com.google.code.facebookapi.FacebookException; jtulach@0: import com.google.code.facebookapi.FacebookJaxbRestClient; jtulach@0: import com.google.code.facebookapi.Permission; jtulach@1: import com.sun.syndication.feed.rss.Channel; jtulach@1: import com.sun.syndication.feed.rss.Item; jtulach@1: import com.sun.syndication.io.WireFeedInput; jtulach@4: import java.awt.Desktop; jtulach@1: import java.io.IOException; jtulach@0: import java.net.URI; jtulach@1: import java.net.URISyntaxException; jtulach@1: import java.net.URL; jtulach@1: import java.util.prefs.Preferences; jtulach@1: import org.xml.sax.InputSource; jtulach@0: jtulach@0: public class Main { jtulach@7: private static String APP_KEY; jtulach@7: private static String APP_SEC; jtulach@7: private static String APP_FEED; jtulach@0: jtulach@1: jtulach@9: // BEGIN: feedbook-login jtulach@1: private static String login() throws IOException, FacebookException, URISyntaxException { jtulach@0: FacebookJaxbRestClient login = new FacebookJaxbRestClient(APP_KEY, APP_SEC); jtulach@0: final String token = login.auth_createToken(); jtulach@0: URI u = new URI("http://www.facebook.com/login.php?api_key=" + APP_KEY + "&auth_token=" + token); jtulach@5: String msg = "authentication"; jtulach@5: browser(msg, u); jtulach@5: return login.auth_getSession(token, false); jtulach@5: } jtulach@9: // END: feedbook-login jtulach@5: jtulach@5: private static void browser(String msg, URI u) throws IOException { jtulach@5: System.out.println(msg + ": " + u); jtulach@4: try { jtulach@4: Desktop.getDesktop().browse(u); jtulach@4: } catch (Exception ex) { jtulach@4: Runtime.getRuntime().exec("xdg-open " + u); jtulach@4: } jtulach@0: System.out.println("Visit the browser and press enter..."); jtulach@0: System.in.read(); jtulach@1: } jtulach@1: jtulach@1: public static void main( String[] args) throws Exception { jtulach@7: Preferences prefs = Preferences.userNodeForPackage(Main.class); jtulach@7: if (args.length == 3) { jtulach@7: prefs.put("id", args[0]); jtulach@7: prefs.put("secret", args[1]); jtulach@7: prefs.put("feed", args[2]); jtulach@7: } else { jtulach@7: if (args.length != 0) { jtulach@7: usage(); jtulach@7: return; jtulach@7: } jtulach@7: } jtulach@7: jtulach@7: jtulach@7: APP_KEY = prefs.get("id", null); jtulach@7: APP_SEC = prefs.get("secret", null); jtulach@7: APP_FEED = prefs.get("feed", null); jtulach@7: jtulach@7: if (APP_FEED == null || APP_SEC == null || APP_KEY == null) { jtulach@7: usage(); jtulach@7: return; jtulach@7: } jtulach@7: jtulach@1: WireFeedInput rssInput = new WireFeedInput(); jtulach@7: URL rssUrl = new URL(APP_FEED); jtulach@1: Channel rss = (Channel)rssInput.build(new InputSource(rssUrl.openStream()));; jtulach@0: jtulach@1: jtulach@1: FacebookJaxbRestClient fb; jtulach@3: Long user; jtulach@1: for (;;) { jtulach@1: final String stored = prefs.get("session", null); jtulach@1: if (stored != null) { jtulach@3: try { jtulach@3: fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, stored); jtulach@3: user = fb.users_getLoggedInUser(); jtulach@3: break; jtulach@3: } catch (FacebookException ex) { jtulach@3: System.err.println(ex.getMessage()); jtulach@3: } jtulach@1: } jtulach@1: final String session = login(); jtulach@1: fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, session); jtulach@3: user = fb.users_getLoggedInUser(); jtulach@1: prefs.put("session", session); jtulach@1: break; jtulach@1: } jtulach@0: jtulach@9: // BEGIN: feedbook-permission jtulach@5: while (!fb.users_hasAppPermission(Permission.SHARE_ITEM)) { jtulach@5: URI u = new URI("https://graph.facebook.com/oauth/authorize?" jtulach@5: + "client_id=" + APP_KEY jtulach@5: + "&redirect_uri=http://www.facebook.com/connect/login_success.html" jtulach@5: + "&scope=publish_stream"); jtulach@5: browser("Need permission to publish links", u); jtulach@5: } jtulach@9: // END: feedbook-permission jtulach@5: Preferences n = prefs.node("feeds"); jtulach@6: int cnt = 0; jtulach@5: for (Object o : rss.getItems()) { jtulach@5: Item item = (Item) o; jtulach@5: String hex = Integer.toHexString(item.getLink().hashCode()); jtulach@5: if (n.getLong(hex, -1L) != -1L) { jtulach@5: continue; jtulach@2: } jtulach@6: cnt++; jtulach@9: // BEGIN: feedbook-publish-link jtulach@9: System.out.printf( jtulach@9: "link: %s date: %s title: %s\n", jtulach@9: item.getLink(), item.getPubDate(), item.getTitle() jtulach@9: ); jtulach@5: Long ok = fb.links_post(user, item.getLink(), item.getTitle()); jtulach@5: System.out.println("posted as " + ok); jtulach@9: // END: feedbook-publish-link jtulach@5: n.putLong(hex, ok); jtulach@5: n.put(hex + ".url", item.getLink()); jtulach@0: } jtulach@6: System.out.println("Published " + cnt + " feed item(s)"); jtulach@0: } jtulach@7: jtulach@7: private static void usage() { jtulach@7: System.out.println("Invoke with three parameters: " jtulach@7: + " " jtulach@7: + ""); jtulach@7: } jtulach@0: }