Android Open Source - interdroid-swan Twitter Sensor






From Project

Back to project page interdroid-swan.

License

The source code is released under:

Copyright (c) 2008-2011 Vrije Universiteit, The Netherlands All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the follo...

If you think the Android project interdroid-swan listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package interdroid.swan.sensors.impl;
//  ww w.  j a  v  a  2  s .  com
import interdroid.swan.R;
import interdroid.swan.sensors.AbstractConfigurationActivity;
import interdroid.swan.sensors.AbstractMemorySensor;

import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.DocumentBuilderFactory;

import org.scribe.builder.ServiceBuilder;
import org.scribe.builder.api.TwitterApi;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.oauth.OAuthService;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

import android.os.Bundle;

/**
 * Based on the original TwitterSensor written by Rick de Leeuw
 *
 * @author rkemp
 */
public class TwitterSensor extends AbstractMemorySensor {

  public static final String TAG = "Twitter";

  public static class ConfigurationActivity extends
      AbstractConfigurationActivity {

    @Override
    public int getPreferencesXML() {
      return R.xml.twitter_preferences;
    }

  }

  public static final String NR_MENTIONS_FIELD = "mentions";

  public static final String SAMPLE_INTERVAL = "sample_interval";
  public static final String ACCESS_TOKEN = "access_token";
  public static final String SECRET_ACCESS_TOKEN = "secret_access_token";

  public static final long DEFAULT_SAMPLE_INTERVAL = 5 * 60 * 1000;

  protected static final int HISTORY_SIZE = 10;

  // Buienradar specific variables
  private static final String API_KEY = "uKfdGc8DLZ7FBnZAePGg";
  private static final String API_SECRET = "NeDCR2mdMGJVeaBz7wL0R5V3rX7QviOb9IsIFpByY";
  private static final String MENTION_URL = "http://api.twitter.com/1/statuses/mentions.xml?trim_user=1";

  private static final OAuthService OAUTH_SERVICE = new ServiceBuilder()
      .provider(TwitterApi.class).apiKey(API_KEY).apiSecret(API_SECRET)
      .build();

  private Map<String, TwitterPoller> activeThreads = new HashMap<String, TwitterPoller>();

  private int sampleTwitter(Token accessToken) {
    OAuthRequest request = new OAuthRequest(Verb.GET, MENTION_URL);
    OAUTH_SERVICE.signRequest(accessToken, request); // the access token
                              // from step
    // 4
    Response response = request.send();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
      Document doc = factory.newDocumentBuilder().parse(
          response.getBody());
      NodeList mentions = doc.getElementsByTagName("status");
      return mentions.getLength();
    } catch (Exception e) {
      return -1;
    }

  }

  @Override
  public String[] getValuePaths() {
    return new String[] { NR_MENTIONS_FIELD };
  }

  @Override
  public void initDefaultConfiguration(Bundle DEFAULT_CONFIGURATION) {
    DEFAULT_CONFIGURATION.putLong(SAMPLE_INTERVAL, DEFAULT_SAMPLE_INTERVAL);
  }

  //@Override
  public String getScheme() {
    return "{'type': 'record', 'name': 'rain', 'namespace': 'context.sensor',"
        + " 'fields': ["
        + "            {'name': '"
        + NR_MENTIONS_FIELD
        + "', 'type': 'integer'}"
        + "           ]"
        + "}".replace('\'', '"');
  }

  @Override
  public void onConnected() {
  }

  @Override
  public final void register(String id, String valuePath, Bundle configuration) {
    TwitterPoller twitterPoller = new TwitterPoller(id, valuePath,
        configuration);
    activeThreads.put(id, twitterPoller);
    twitterPoller.start();
  }

  @Override
  public final void unregister(String id) {
    activeThreads.remove(id).interrupt();
  }

  class TwitterPoller extends Thread {

    private Bundle configuration;
    private String valuePath;
    private String id;

    TwitterPoller(String id, String valuePath, Bundle configuration) {
      this.id = id;
      this.configuration = configuration;
      this.valuePath = valuePath;
    }

    public void run() {
      Token token = new Token(configuration.getString(ACCESS_TOKEN),
          configuration.getString(SECRET_ACCESS_TOKEN));
      while (!isInterrupted()) {
        long start = System.currentTimeMillis();
        int mentions = sampleTwitter(token);
        if (mentions >= 0) {
          putValueTrimSize(valuePath, id, start, mentions,
              HISTORY_SIZE);
        }

        try {
          Thread.sleep(Math.max(
              0,
              configuration.getLong(SAMPLE_INTERVAL,
                  mDefaultConfiguration
                      .getLong(SAMPLE_INTERVAL))
                  + start - System.currentTimeMillis()));
        } catch (InterruptedException e) {
        }
      }
    }

  }

  @Override
  public void onDestroySensor() {
    for (TwitterPoller twitterPoller : activeThreads.values()) {
      twitterPoller.interrupt();
    }
  };

}




Java Source Code List

interdroid.swan.ExpressionListener.java
interdroid.swan.ExpressionManager.java
interdroid.swan.SensorConfigurationException.java
interdroid.swan.SensorInfo.java
interdroid.swan.SwanException.java
interdroid.swan.TriStateExpressionListener.java
interdroid.swan.ValueExpressionListener.java
interdroid.swan.crossdevice.Converter.java
interdroid.swan.crossdevice.CrossDeviceReceiver.java
interdroid.swan.crossdevice.Pusher.java
interdroid.swan.crossdevice.Registry.java
interdroid.swan.crossdevice.SwanGCMConstants.java
interdroid.swan.crossdevice.SwanLakeActivity.java
interdroid.swan.engine.EvaluationEngineReceiver.java
interdroid.swan.engine.EvaluationEngineService.java
interdroid.swan.engine.EvaluationManager.java
interdroid.swan.engine.ExpressionViewerActivity.java
interdroid.swan.engine.QueuedExpression.java
interdroid.swan.engine.SensorSetupFailedException.java
interdroid.swan.engine.SensorViewerActivity.java
interdroid.swan.engine.TextProgressBar.java
interdroid.swan.sensors.AbstractConfigurationActivity.java
interdroid.swan.sensors.AbstractCuckooSensor.java
interdroid.swan.sensors.AbstractMemorySensor.java
interdroid.swan.sensors.AbstractSensorBase.java
interdroid.swan.sensors.AbstractVdbSensor.java
interdroid.swan.sensors.MonitorThread.java
interdroid.swan.sensors.SensorInterface.java
interdroid.swan.sensors.TimeSensor.java
interdroid.swan.sensors.impl.BatterySensor.java
interdroid.swan.sensors.impl.BluetoothSensor.java
interdroid.swan.sensors.impl.CalendarSensor.java
interdroid.swan.sensors.impl.CallSensor.java
interdroid.swan.sensors.impl.GyroscopeSensor.java
interdroid.swan.sensors.impl.IntentSensor.java
interdroid.swan.sensors.impl.LightSensor.java
interdroid.swan.sensors.impl.LocationSensor.java
interdroid.swan.sensors.impl.LogCatSensor.java
interdroid.swan.sensors.impl.MagnetometerSensor.java
interdroid.swan.sensors.impl.MovementSensor.java
interdroid.swan.sensors.impl.PolarHeartRate.java
interdroid.swan.sensors.impl.PressureSensor.java
interdroid.swan.sensors.impl.ProximitySensor.java
interdroid.swan.sensors.impl.ScreenSensor.java
interdroid.swan.sensors.impl.SignalStrengthSensor.java
interdroid.swan.sensors.impl.SmartLocationSensor.java
interdroid.swan.sensors.impl.SoundSensor.java
interdroid.swan.sensors.impl.TemperatureSensor.java
interdroid.swan.sensors.impl.TwitterSensor.java
interdroid.swan.sensors.impl.WifiSensor.java
interdroid.swan.sensors.impl.package-info.java
interdroid.swan.swansong.BinaryLogicOperator.java
interdroid.swan.swansong.ComparatorResult.java
interdroid.swan.swansong.Comparator.java
interdroid.swan.swansong.ComparisonExpression.java
interdroid.swan.swansong.ConstantValueExpression.java
interdroid.swan.swansong.ExpressionFactory.java
interdroid.swan.swansong.ExpressionParseException.java
interdroid.swan.swansong.Expression.java
interdroid.swan.swansong.HistoryReductionMode.java
interdroid.swan.swansong.LogicExpression.java
interdroid.swan.swansong.LogicOperator.java
interdroid.swan.swansong.MathOperator.java
interdroid.swan.swansong.MathValueExpression.java
interdroid.swan.swansong.ParseableEnum.java
interdroid.swan.swansong.Parseable.java
interdroid.swan.swansong.Result.java
interdroid.swan.swansong.SensorValueExpression.java
interdroid.swan.swansong.TimestampedValue.java
interdroid.swan.swansong.TriStateExpression.java
interdroid.swan.swansong.TriState.java
interdroid.swan.swansong.UnaryLogicOperator.java
interdroid.swan.swansong.ValueExpression.java
interdroid.swan.ui.EnterConstantDialog.java
interdroid.swan.ui.ExpressionBuilderActivity.java
interdroid.swan.ui.LaunchService.java
interdroid.swan.ui.MergeExpressionDialog.java
interdroid.swan.ui.NewExpressionDialog.java
interdroid.swan.ui.NewMathExpressionDialog.java
interdroid.swan.ui.SelectComparatorDialog.java
interdroid.swan.ui.SelectExpressionDialog.java
interdroid.swan.ui.SelectOperatorDialog.java
interdroid.swan.ui.SelectSensorDialog.java
interdroid.swan.ui.SelectTypedValueDialog.java
interdroid.swan.ui.package-info.java
interdroid.swan.util.SeekBarPreference.java
interdroid.swan.util.TimePreference.java