src/main/java/cz/xelfi/feedbook/Main.java
author Jaroslav Tulach <jtulach@netbeans.org>
Wed, 10 Nov 2010 17:26:00 +0100
changeset 4 c366470a05e1
parent 3 ba411f9d13e5
child 5 e1d564765efd
permissions -rw-r--r--
Try the Desktop and only if it fails fallback to xdg-open
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@0
    18
    private static final String APP_KEY = "ecdbd5dbacc168f9edfe470ccd7e401b";
jtulach@0
    19
    private static final String APP_SEC = "22e3165366e958a6e049e1e0c1d30105";
jtulach@0
    20
    
jtulach@1
    21
    
jtulach@1
    22
    private static String login() throws IOException, FacebookException, URISyntaxException {
jtulach@0
    23
        FacebookJaxbRestClient login = new FacebookJaxbRestClient(APP_KEY, APP_SEC);
jtulach@0
    24
        final String token = login.auth_createToken();
jtulach@0
    25
        URI u = new URI("http://www.facebook.com/login.php?api_key=" + APP_KEY + "&auth_token=" + token);
jtulach@1
    26
        System.out.println("authentication: " + u);
jtulach@4
    27
        try {
jtulach@4
    28
            Desktop.getDesktop().browse(u);
jtulach@4
    29
        } catch (Exception ex) {
jtulach@4
    30
            Runtime.getRuntime().exec("xdg-open " + u);
jtulach@4
    31
        }
jtulach@0
    32
        System.out.println("Visit the browser and press enter...");
jtulach@0
    33
        System.in.read();
jtulach@0
    34
        
jtulach@3
    35
        return login.auth_getSession(token, false); 
jtulach@1
    36
    }
jtulach@1
    37
    
jtulach@1
    38
    public static void main( String[] args) throws Exception {
jtulach@1
    39
        WireFeedInput rssInput = new WireFeedInput();
jtulach@1
    40
        URL rssUrl = new URL("http://blogs.apidesign.org/rss/");
jtulach@1
    41
        Channel rss = (Channel)rssInput.build(new InputSource(rssUrl.openStream()));;
jtulach@0
    42
        
jtulach@1
    43
        Preferences prefs = Preferences.userNodeForPackage(Main.class);
jtulach@1
    44
        
jtulach@1
    45
        FacebookJaxbRestClient fb;
jtulach@3
    46
        Long user;
jtulach@1
    47
        for (;;) {
jtulach@1
    48
            final String stored = prefs.get("session", null);
jtulach@1
    49
            if (stored != null) {
jtulach@3
    50
                try {
jtulach@3
    51
                    fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, stored);
jtulach@3
    52
                    user = fb.users_getLoggedInUser();
jtulach@3
    53
                    break;
jtulach@3
    54
                } catch (FacebookException ex) {
jtulach@3
    55
                    System.err.println(ex.getMessage());
jtulach@3
    56
                }
jtulach@1
    57
            }
jtulach@1
    58
            final String session = login();
jtulach@1
    59
            fb = new FacebookJaxbRestClient(APP_KEY, APP_SEC, session);
jtulach@3
    60
            user = fb.users_getLoggedInUser();
jtulach@1
    61
            prefs.put("session", session);
jtulach@1
    62
            break;
jtulach@1
    63
        }
jtulach@0
    64
        
jtulach@0
    65
        if (fb.users_hasAppPermission(Permission.SHARE_ITEM)) {
jtulach@2
    66
            Preferences n = prefs.node("feeds");
jtulach@2
    67
            for (Object o : rss.getItems()) {
jtulach@2
    68
                Item item = (Item) o;
jtulach@2
    69
                String hex = Integer.toHexString(item.getLink().hashCode());
jtulach@2
    70
                if (n.getLong(hex, -1L) != -1L) {
jtulach@2
    71
                    continue;
jtulach@2
    72
                }
jtulach@2
    73
                System.err.printf("link: %s date: %s title: %s\n", item.getLink(), item.getPubDate(), item.getTitle());
jtulach@2
    74
                Long ok = fb.links_post(user, item.getLink(), item.getTitle());
jtulach@2
    75
                System.out.println("posted as " + ok);
jtulach@2
    76
                n.putLong(hex, ok);
jtulach@2
    77
                n.put(hex + ".url", item.getLink());
jtulach@2
    78
            }
jtulach@0
    79
        } else {
jtulach@0
    80
            System.out.println("No permission to share links");
jtulach@0
    81
        }
jtulach@0
    82
    }
jtulach@0
    83
}