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