Permalink
Browse files

Helper to sync individual timelines with TweetMarker

  • Loading branch information...
pilhuhn committed Aug 31, 2012
1 parent af0ad25 commit bb21a485411e09bc57097e4c1eb125ad8d4bb57b
Showing with 135 additions and 0 deletions.
  1. +135 −0 src/de/bsd/zwitscher/other/TweetMarkerSync.java
@@ -0,0 +1,135 @@
+package de.bsd.zwitscher.other;
+
+
+import android.util.Log;
+import de.bsd.zwitscher.Tokens;
+import org.json.JSONException;
+import org.json.JSONObject;
+import twitter4j.auth.OAuthAuthorization;
+import twitter4j.internal.http.HttpParameter;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.List;
+
+/**
+ * Code to sync last read status ids with TweetMarker (http://tweetmarker.net)
+ * There are a few clients out there that already use the service, so this not
+ * only allows you to sync between multiple instances of Zwitscher, but also
+ * your favorite desktop client (if it supports TM too).
+ *
+ * @author Heiko W. Rupp
+ */
+public class TweetMarkerSync {
+
+ private static final String TWITTER_VERIFY_CREDENTIALS_JSON = "https://api.twitter.com/1/account/verify_credentials.json";
+
+ public static void syncToTweetMarker(String collection,long lastRead, String user, OAuthAuthorization oauth) {
+ String jsonString;
+ try {
+ JSONObject idObject = new JSONObject();
+ idObject.put("id",lastRead);
+ JSONObject baseObject = new JSONObject();
+ baseObject.put(collection,idObject);
+ jsonString = baseObject.toString();
+ } catch (JSONException e) {
+ e.printStackTrace(); // TODO: Customise this generated block
+ return;
+ }
+
+ String urlString = "https://api.tweetmarker.net/v2/lastread?api_key=" + Tokens.tweetMarkerToken +
+ "&username=" + user;
+
+ String auth = generateVerifyCredentialsAuthorizationHeader(TWITTER_VERIFY_CREDENTIALS_JSON, oauth);
+
+ URL url;
+ HttpURLConnection conn = null;
+ try {
+ url = new URL(urlString);
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setDoInput(false);
+ conn.setDoOutput(true);
+ conn.setRequestMethod("POST");
+ conn.addRequestProperty("X-Auth-Service-Provider", TWITTER_VERIFY_CREDENTIALS_JSON); // TODO status.net
+ conn.addRequestProperty("X-Verify-Credentials-Authorization",auth);
+ OutputStream out = conn.getOutputStream();
+ out.write(jsonString.getBytes());
+ out.flush();
+ out.close();
+ int code = conn.getResponseCode();
+ if (code!=200) {
+ Log.e("Write to tm", "Response was " + code);
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ // Copied from Twiter4j's media helper AbstractImageUploadImpl
+ static protected String generateVerifyCredentialsAuthorizationHeader(String verifyCredentialsUrl, OAuthAuthorization oauth) {
+ List<HttpParameter> oauthSignatureParams = oauth.generateOAuthSignatureHttpParams("GET", verifyCredentialsUrl);
+ return "OAuth realm=\"http://api.twitter.com/\"," + OAuthAuthorization.encodeParameters(oauthSignatureParams, ",", true);
+ }
+
+
+ /**
+ * Read last-read data from TweetMarker
+ * @param collection
+ * @param user
+ * @return
+ */
+ public static long syncFromTweetMarker(String collection,String user) {
+
+ String urlString = "https://api.tweetmarker.net/v2/lastread?collection=" + collection +
+ "&username=" + user + "&api_key=" + Tokens.tweetMarkerToken;
+
+ URL url;
+ HttpURLConnection conn = null;
+ BufferedReader in = null;
+ try {
+ url= new URL(urlString);
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestMethod("GET");
+ conn.setDoInput(true);
+ conn.setDoOutput(false);
+ int code = conn.getResponseCode();
+ if (code==200) {
+
+
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String line;
+ StringBuilder builder = new StringBuilder();
+ while ((line = in.readLine())!=null) {
+ builder.append(line);
+ }
+ String result = builder.toString();
+ // input is now JSON
+
+ JSONObject jsonObject = new JSONObject(result);
+ JSONObject timeline = jsonObject.getJSONObject(collection);
+ if (timeline!=null) {
+ long val = timeline.getLong("id");
+ return val;
+ }
+ }
+ else {
+ return -1;
+ }
+ } catch (Exception e) {
+ Log.e("syncFromTM","failed", e);
+ } finally {
+ if (conn!=null)
+ conn.disconnect();
+ if (in!=null)
+ try {
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace(); // TODO: Customise this generated block
+ }
+ }
+ return -1;
+ }
+}

0 comments on commit bb21a48

Please sign in to comment.