src/main/java/cz/xelfi/feedbook/Main.java
author Jaroslav Tulach <jtulach@netbeans.org>
Wed, 10 Nov 2010 23:44:04 +0100
changeset 9 6a5c4c2bda38
parent 7 a2bb3db4c9b6
child 10 febc09a6a7cf
permissions -rw-r--r--
Highlighting specific code snippets
jtulach@0
     1
package cz.xelfi.feedbook;
jtulach@0
     2
jtulach@1
     3
import com.google.code.facebookapi.FacebookException;
jtulach@0
     4
import com.google.code.facebookapi.FacebookJaxbRestClient;
jtulach@0
     5
import com.google.code.facebookapi.Permission;
jtulach@1
     6
import com.sun.syndication.feed.rss.Channel;
jtulach@1
     7
import com.sun.syndication.feed.rss.Item;
jtulach@1
     8
import com.sun.syndication.io.WireFeedInput;
jtulach@4
     9
import java.awt.Desktop;
jtulach@1
    10
import java.io.IOException;
jtulach@0
    11
import java.net.URI;
jtulach@1
    12
import java.net.URISyntaxException;
jtulach@1
    13
import java.net.URL;
jtulach@1
    14
import java.util.prefs.Preferences;
jtulach@1
    15
import org.xml.sax.InputSource;
jtulach@0
    16
jtulach@0
    17
public class Main {
jtulach@7
    18
    private static String APP_KEY;
jtulach@7
    19
    private static String APP_SEC;
jtulach@7
    20
    private static String APP_FEED;
jtulach@0
    21
    
jtulach@1
    22
    
jtulach@9
    23
    // BEGIN: feedbook-login
jtulach@1
    24
    private static String login() throws IOException, FacebookException, URISyntaxException {
jtulach@0
    25
        FacebookJaxbRestClient login = new FacebookJaxbRestClient(APP_KEY, APP_SEC);
jtulach@0
    26
        final String token = login.auth_createToken();
jtulach@0
    27
        URI u = new URI("http://www.facebook.com/login.php?api_key=" + APP_KEY + "&auth_token=" + token);
jtulach@5
    28
        String msg = "authentication";
jtulach@5
    29
        browser(msg, u);
jtulach@5
    30
        return login.auth_getSession(token, false); 
jtulach@5
    31
    }
jtulach@9
    32
    // END: feedbook-login
jtulach@5
    33
jtulach@5
    34
    private static void browser(String msg, URI u) throws IOException {
jtulach@5
    35
        System.out.println(msg + ": " + u);
jtulach@4
    36
        try {
jtulach@4
    37
            Desktop.getDesktop().browse(u);
jtulach@4
    38
        } catch (Exception ex) {
jtulach@4
    39
            Runtime.getRuntime().exec("xdg-open " + u);
jtulach@4
    40
        }
jtulach@0
    41
        System.out.println("Visit the browser and press enter...");
jtulach@0
    42
        System.in.read();
jtulach@1
    43
    }
jtulach@1
    44
    
jtulach@1
    45
    public static void main( String[] args) throws Exception {
jtulach@7
    46
        Preferences prefs = Preferences.userNodeForPackage(Main.class);
jtulach@7
    47
        if (args.length == 3) {
jtulach@7
    48
            prefs.put("id", args[0]);
jtulach@7
    49
            prefs.put("secret", args[1]);
jtulach@7
    50
            prefs.put("feed", args[2]);
jtulach@7
    51
        } else {
jtulach@7
    52
            if (args.length != 0) {
jtulach@7
    53
                usage();
jtulach@7
    54
                return;
jtulach@7
    55
            }
jtulach@7
    56
        }
jtulach@7
    57
        
jtulach@7
    58
        
jtulach@7
    59
        APP_KEY = prefs.get("id", null);
jtulach@7
    60
        APP_SEC = prefs.get("secret", null);
jtulach@7
    61
        APP_FEED = prefs.get("feed", null);
jtulach@7
    62
        
jtulach@7
    63
        if (APP_FEED == null || APP_SEC == null || APP_KEY == null) {
jtulach@7
    64
            usage();
jtulach@7
    65
            return;
jtulach@7
    66
        }
jtulach@7
    67
        
jtulach@1
    68
        WireFeedInput rssInput = new WireFeedInput();
jtulach@7
    69
        URL rssUrl = new URL(APP_FEED);
jtulach@1
    70
        Channel rss = (Channel)rssInput.build(new InputSource(rssUrl.openStream()));;
jtulach@0
    71
        
jtulach@1
    72
        
jtulach@1
    73
        FacebookJaxbRestClient fb;
jtulach@3
    74
        Long user;
jtulach@1
    75
        for (;;) {
jtulach@1
    76
            final String stored = prefs.get("session", null);
jtulach@1
    77
            if (stored != null) {
jtulach@3
    78
                try {
jtulach@3
    79
                    fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, stored);
jtulach@3
    80
                    user = fb.users_getLoggedInUser();
jtulach@3
    81
                    break;
jtulach@3
    82
                } catch (FacebookException ex) {
jtulach@3
    83
                    System.err.println(ex.getMessage());
jtulach@3
    84
                }
jtulach@1
    85
            }
jtulach@1
    86
            final String session = login();
jtulach@1
    87
            fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, session);
jtulach@3
    88
            user = fb.users_getLoggedInUser();
jtulach@1
    89
            prefs.put("session", session);
jtulach@1
    90
            break;
jtulach@1
    91
        }
jtulach@0
    92
        
jtulach@9
    93
        // BEGIN: feedbook-permission
jtulach@5
    94
        while (!fb.users_hasAppPermission(Permission.SHARE_ITEM)) {
jtulach@5
    95
            URI u = new URI("https://graph.facebook.com/oauth/authorize?"
jtulach@5
    96
                    + "client_id=" + APP_KEY
jtulach@5
    97
                    + "&redirect_uri=http://www.facebook.com/connect/login_success.html"
jtulach@5
    98
                    + "&scope=publish_stream");
jtulach@5
    99
            browser("Need permission to publish links", u);
jtulach@5
   100
        }
jtulach@9
   101
        // END: feedbook-permission
jtulach@5
   102
        Preferences n = prefs.node("feeds");
jtulach@6
   103
        int cnt = 0;
jtulach@5
   104
        for (Object o : rss.getItems()) {
jtulach@5
   105
            Item item = (Item) o;
jtulach@5
   106
            String hex = Integer.toHexString(item.getLink().hashCode());
jtulach@5
   107
            if (n.getLong(hex, -1L) != -1L) {
jtulach@5
   108
                continue;
jtulach@2
   109
            }
jtulach@6
   110
            cnt++;
jtulach@9
   111
            // BEGIN: feedbook-publish-link
jtulach@9
   112
            System.out.printf(
jtulach@9
   113
                "link: %s date: %s title: %s\n", 
jtulach@9
   114
                item.getLink(), item.getPubDate(), item.getTitle()
jtulach@9
   115
            );
jtulach@5
   116
            Long ok = fb.links_post(user, item.getLink(), item.getTitle());
jtulach@5
   117
            System.out.println("posted as " + ok);
jtulach@9
   118
            // END: feedbook-publish-link
jtulach@5
   119
            n.putLong(hex, ok);
jtulach@5
   120
            n.put(hex + ".url", item.getLink());
jtulach@0
   121
        }
jtulach@6
   122
        System.out.println("Published " + cnt + " feed item(s)");
jtulach@0
   123
    }
jtulach@7
   124
jtulach@7
   125
    private static void usage() {
jtulach@7
   126
        System.out.println("Invoke with three parameters: "
jtulach@7
   127
                + "<facebook_app_key> "
jtulach@7
   128
                + "<facebook_app_secret "
jtulach@7
   129
                + "<rss_feed_url>");
jtulach@7
   130
    }
jtulach@0
   131
}