package twitter.streaming; import java.util.Map; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import backtype.storm.task.TopologyContext; import backtype.storm.topology.BasicOutputCollector; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseBasicBolt; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; public class TwitterDataExtractor extends BaseBasicBolt{ private static final long serialVersionUID = -3025639777071957758L; static JSONParser jsonParser = new JSONParser(); @Override public void cleanup() { } @Override public void execute(Tuple input, BasicOutputCollector collector) { String json = (String)input.getValueByField("tweet"); try { JSONObject jsonObject = (JSONObject) jsonParser.parse(json); if(jsonObject.containsKey("entities")){ JSONObject entities = (JSONObject) jsonObject.get("entities"); if(entities.containsKey("hashtags")){ for(Object obj : (JSONArray)entities.get("hashtags")){ JSONObject hashObj = (JSONObject) obj; collector.emit(new Values(input.getString(0),hashObj.get("text"). toString().toLowerCase())); } } } } catch (ParseException e) { e.printStackTrace(); } } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("trackList","hashtag")); } @Override public void prepare(Map stormConf, TopologyContext context) { } }