Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
www.autentia.comGeoSentimentZdomingo 2 de junio de 13
www.autentia.comWho’s that guydomingo 2 de junio de 13
www.autentia.comWant to track something?Probably people is talkingabout it on the Web andsocial mediadomingo 2 de junio de...
www.autentia.comAre you trendy?domingo 2 de junio de 13
www.autentia.comAre you trendy?domingo 2 de junio de 13
www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
www.autentia.comHow influential are you?domingo 2 de junio de 13
www.autentia.comNew tools to measureBuilt on APIs to get dataBuilt on APIs to represent datadomingo 2 de junio de 13
www.autentia.comThe Building blocks:The APIsdomingo 2 de junio de 13
www.autentia.comGoogle Maps APIWell known interfaceGives different layers- Map- Terrain- SatellitePlace Points Of Interest...
www.autentia.comGoogle Maps API use<script	  src="http://maps.google.com/maps/api/js?sensor=false"></script>var	  map;func...
www.autentia.comGoogle Maps API use<script	  src="http://maps.google.com/maps/api/js?sensor=false"></script>var	  map;func...
www.autentia.comGoogle Maps API usefunction	  callEvents(){	   var	  searchQuery	  =	  $(#searchQuery).value;	   $.ajax({	...
www.autentia.comGoogle Maps API usefunction	  callEvents(){	   var	  searchQuery	  =	  $(#searchQuery).value;	   $.ajax({	...
www.autentia.comGoogle Maps API usefunction	  putEvents(events){	   var	  bounds	  =	  new	  google.maps.LatLngBounds();	 ...
www.autentia.comThe Source: twitterAn open window to shout yourthougths...... that everyone can listen#hashtags@usersquery...
www.autentia.comInfo contained in a tweethttp://www.geekosystem.com/tweet-diagram/domingo 2 de junio de 13
www.autentia.comTwitter: The search APIdomingo 2 de junio de 13
www.autentia.comTwitter: The search API<dependency>	 <groupId>org.twitter4j</groupId>	 <artifactId>twitter4j-core</artifac...
www.autentia.comTwitter: The search API<dependency>	 <groupId>org.twitter4j</groupId>	 <artifactId>twitter4j-core</artifac...
www.autentia.comTwitter: The search APIpublic	  List<Event>	  retrieveAllTweetsByQuery(String	  hashtag)	   	   throws	  T...
www.autentia.comWhat others have doneWorld Cup TrendsMapdomingo 2 de junio de 13
www.autentia.comWhat others have doneMagnitude Calculatorhttp://hitching.net/magnitwude/domingo 2 de junio de 13
www.autentia.comWhat others have donedomingo 2 de junio de 13
www.autentia.comThe missing pieceAdding sentimental analysisdomingo 2 de junio de 13
www.autentia.comThe missing pieceAdding sentimental analysisdomingo 2 de junio de 13
www.autentia.comThe missing piece@Value("https://store.apicultur.com/api/stmtlk/1.0.0/valoracion/tweet/10")private	  Strin...
www.autentia.comThe missing piecepublic	  Sentiment	  rate(Tweet	  tweet)	  {	  	  	  logger.debug("Rating	  sentimentally...
www.autentia.comThe missing piecepublic	  class	  Sentiment	  {	  	  	  	  private	  static	  final	  int	  LEVEL_UNKNOWN	...
www.autentia.comThe missing piecepublic	  class	  Sentiment	  {	  	  	  	  private	  static	  final	  int	  LEVEL_UNKNOWN	...
www.autentia.comPutting all the blockstoghether:GeoSentimentZdomingo 2 de junio de 13
www.autentia.comGeoSentimentzdomingo 2 de junio de 13
www.autentia.comSome final considerationsBe careful with API invocation pace(Some APIs have limits/prices)Use Queues/Sched...
www.autentia.com“Somos pocos, somos buenos, estamosmotivados y nos gusta lo que hacemos”Thanks for listening@dgomezg@auten...
Próxima SlideShare
Cargando en…5
×

Geo-SentimentZ

838 visualizaciones

Publicado el

How to track an Event, trademark, company or subject to know not only how much people is talking about it, but also analizying sentimentally what is being said to know whether people is talking positive or negative.

An example mixing public APIs from Twitter, Google Maps and APICulture.

This is the slides set I used for my talk at Mediterranea APIDays held in Madrid in

Publicado en: Tecnología, Educación
  • Sé el primero en comentar

Geo-SentimentZ

  1. 1. www.autentia.comGeoSentimentZdomingo 2 de junio de 13
  2. 2. www.autentia.comWho’s that guydomingo 2 de junio de 13
  3. 3. www.autentia.comWant to track something?Probably people is talkingabout it on the Web andsocial mediadomingo 2 de junio de 13
  4. 4. www.autentia.comAre you trendy?domingo 2 de junio de 13
  5. 5. www.autentia.comAre you trendy?domingo 2 de junio de 13
  6. 6. www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
  7. 7. www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
  8. 8. www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
  9. 9. www.autentia.comNew ways to measureTPS: Tweets Per Seconddomingo 2 de junio de 13
  10. 10. www.autentia.comHow influential are you?domingo 2 de junio de 13
  11. 11. www.autentia.comNew tools to measureBuilt on APIs to get dataBuilt on APIs to represent datadomingo 2 de junio de 13
  12. 12. www.autentia.comThe Building blocks:The APIsdomingo 2 de junio de 13
  13. 13. www.autentia.comGoogle Maps APIWell known interfaceGives different layers- Map- Terrain- SatellitePlace Points Of InterestGroup POIsPOI metadatadomingo 2 de junio de 13
  14. 14. www.autentia.comGoogle Maps API use<script  src="http://maps.google.com/maps/api/js?sensor=false"></script>var  map;function  initialize()  {    var  center  =  new  google.maps.LatLng(50,  20);    map  =  new  google.maps.Map(document.getElementById(map),  {        zoom:  3,        center:  center,        mapTypeId:  google.maps.MapTypeId.ROADMAP    });}google.maps.event.addDomListener(window,  load,  initialize);domingo 2 de junio de 13
  15. 15. www.autentia.comGoogle Maps API use<script  src="http://maps.google.com/maps/api/js?sensor=false"></script>var  map;function  initialize()  {    var  center  =  new  google.maps.LatLng(50,  20);    map  =  new  google.maps.Map(document.getElementById(map),  {        zoom:  3,        center:  center,        mapTypeId:  google.maps.MapTypeId.ROADMAP    });}google.maps.event.addDomListener(window,  load,  initialize);<div id="map-container"><div id="map"></div></div>domingo 2 de junio de 13
  16. 16. www.autentia.comGoogle Maps API usefunction  callEvents(){   var  searchQuery  =  $(#searchQuery).value;   $.ajax({     url:  /sentimentz/pois/  +  encodeURIComponent(searchQuery),     type:  GET,     contentType:  application/json,     success:  function(data){       setTimeout(function(){  putEvents(data)},  500);     },     error:  function(data,  status,  er){       //....     }   });}domingo 2 de junio de 13
  17. 17. www.autentia.comGoogle Maps API usefunction  callEvents(){   var  searchQuery  =  $(#searchQuery).value;   $.ajax({     url:  /sentimentz/pois/  +  encodeURIComponent(searchQuery),     type:  GET,     contentType:  application/json,     success:  function(data){       setTimeout(function(){  putEvents(data)},  500);     },     error:  function(data,  status,  er){       //....     }   });}[      {            "rate":0,            "msg":"Muy  buena  exposición    sobre  API  business  model  #APIDays",            "location":{                  "latitude":40.44614387,                  "longitude":-­‐3.67365923            },            "id":340414678016593920,            "createAt":1369996158000      }]domingo 2 de junio de 13
  18. 18. www.autentia.comGoogle Maps API usefunction  putEvents(events){   var  bounds  =  new  google.maps.LatLngBounds();   var  markers  =  [];   document.getElementById("totalGeoTweets").innerHTML  =  events.length;        for  (var  i  =  0;  i  <  events.length;  i++)  {            var  event  =  events[i];            var  latLng  =  new  google.maps.LatLng(event.location.latitude,                    event.location.longitude);            bounds.extend(latLng);            var  marker  =  new  google.maps.Marker({                position:  latLng,                map:  map,            });            markers.push(marker);        }   map.fitBounds(bounds);        var  markerCluster  =  new  MarkerClusterer(map,  markers);}domingo 2 de junio de 13
  19. 19. www.autentia.comThe Source: twitterAn open window to shout yourthougths...... that everyone can listen#hashtags@usersqueryStringsGeolocalizeddomingo 2 de junio de 13
  20. 20. www.autentia.comInfo contained in a tweethttp://www.geekosystem.com/tweet-diagram/domingo 2 de junio de 13
  21. 21. www.autentia.comTwitter: The search APIdomingo 2 de junio de 13
  22. 22. www.autentia.comTwitter: The search API<dependency> <groupId>org.twitter4j</groupId> <artifactId>twitter4j-core</artifactId> <version>3.0.3</version></dependency>domingo 2 de junio de 13
  23. 23. www.autentia.comTwitter: The search API<dependency> <groupId>org.twitter4j</groupId> <artifactId>twitter4j-core</artifactId> <version>3.0.3</version></dependency>public  List<Event>  retrieveAllTweetsByQuery(String  hashtag)     throws  TwitterException,  MalformedURLException  {   Twitter  twitter  =  TwitterFactory.getInstance();   Query  query  =  new  Query(hashtag);   QueryResult  result;   List<Status>  tweets  =  new  ArrayList<Status>();   do  {     result  =  twitter.search(query);     tweets.addAll(result.getTweets());   }  while  ((query  =  result.nextQuery())  !=  null);}  domingo 2 de junio de 13
  24. 24. www.autentia.comTwitter: The search APIpublic  List<Event>  retrieveAllTweetsByQuery(String  hashtag)     throws  TwitterException,  MalformedURLException  {   Twitter  twitter  =  getTwitterAccessor();   Query  query  =  new  Query(hashtag);   QueryResult  result;   List<Status>  tweets  =  new  ArrayList<Status>();   do  {     result  =  twitter.search(query);     tweets.addAll(result.getTweets());   }  while  ((query  =  result.nextQuery())  !=  null);}  domingo 2 de junio de 13
  25. 25. www.autentia.comWhat others have doneWorld Cup TrendsMapdomingo 2 de junio de 13
  26. 26. www.autentia.comWhat others have doneMagnitude Calculatorhttp://hitching.net/magnitwude/domingo 2 de junio de 13
  27. 27. www.autentia.comWhat others have donedomingo 2 de junio de 13
  28. 28. www.autentia.comThe missing pieceAdding sentimental analysisdomingo 2 de junio de 13
  29. 29. www.autentia.comThe missing pieceAdding sentimental analysisdomingo 2 de junio de 13
  30. 30. www.autentia.comThe missing piece@Value("https://store.apicultur.com/api/stmtlk/1.0.0/valoracion/tweet/10")private  String  serviceUrl  =  null;private  RestTemplate  restTemplate;<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version></dependency>domingo 2 de junio de 13
  31. 31. www.autentia.comThe missing piecepublic  Sentiment  rate(Tweet  tweet)  {      logger.debug("Rating  sentimentally  tweet  "  +  tweet.getText());      Sentiment  sentiment;      try  {              sentiment  =  restTemplate.postForObject(serviceUrl,  tweet,  Sentiment.class);      }  catch  (Exception  ex)  {              logger.error("Could  not  rate  "  +  tweet  +  "  Error:  "  +  ex.getMessage(),  ex);              return  Sentiment.UNRATED;      }      logger.debug("Tweet  rated  sentimentally  as  :  "  +  sentiment);      return  sentiment;}domingo 2 de junio de 13
  32. 32. www.autentia.comThe missing piecepublic  class  Sentiment  {        private  static  final  int  LEVEL_UNKNOWN  =  0;        public  static  final  Sentiment  UNRATED  =  new  Sentiment(LEVEL_UNKNOWN,  LEVEL_UNKNOWN,  "NEUTRO");        @JsonProperty("intensidad")        private  int  intensity  =  0;        @JsonProperty("certidumbre")        private  int  certainty  =  0;        @JsonProperty("ponderacion")        private  String  sentiment;}domingo 2 de junio de 13
  33. 33. www.autentia.comThe missing piecepublic  class  Sentiment  {        private  static  final  int  LEVEL_UNKNOWN  =  0;        public  static  final  Sentiment  UNRATED  =  new  Sentiment(LEVEL_UNKNOWN,  LEVEL_UNKNOWN,  "NEUTRO");        @JsonProperty("intensidad")        private  int  intensity  =  0;        @JsonProperty("certidumbre")        private  int  certainty  =  0;        @JsonProperty("ponderacion")        private  String  sentiment;}{    "intensidad":  4,    "certidumbre":  4,    "ponderacion":  "POSITIVA",    "texto":  "wso2  api  manager  interesante  gestionar  apis  uso  http//kcyme/lqie  apidays"}domingo 2 de junio de 13
  34. 34. www.autentia.comPutting all the blockstoghether:GeoSentimentZdomingo 2 de junio de 13
  35. 35. www.autentia.comGeoSentimentzdomingo 2 de junio de 13
  36. 36. www.autentia.comSome final considerationsBe careful with API invocation pace(Some APIs have limits/prices)Use Queues/Schedulers to calm APIcalls trafficSome Sentiment could not be reliableIntruder tweetsNot spanishSlang, arbbr, typosdomingo 2 de junio de 13
  37. 37. www.autentia.com“Somos pocos, somos buenos, estamosmotivados y nos gusta lo que hacemos”Thanks for listening@dgomezg@autentiadomingo 2 de junio de 13

×