याहू में अपाचे तूफान! वित्त
याहू! वित्त इंटरनेट की प्रमुख व्यावसायिक समाचार और वित्तीय डेटा वेबसाइट है। यह याहू का एक हिस्सा है! और वित्तीय समाचार, बाजार के आंकड़े, अंतर्राष्ट्रीय बाजार के आंकड़ों और वित्तीय संसाधनों के बारे में अन्य जानकारी के बारे में जानकारी देता है जिसे कोई भी उपयोग कर सकता है।
यदि आप एक पंजीकृत याहू हैं! उपयोगकर्ता, तो आप याहू अनुकूलित कर सकते हैं! इसके निश्चित प्रसाद का लाभ उठाने के लिए वित्त। याहू! वित्त एपीआई याहू से वित्तीय डेटा क्वेरी करने के लिए प्रयोग किया जाता है!
यह एपीआई वास्तविक समय से 15 मिनट की देरी से डेटा प्रदर्शित करता है, और अपने डेटाबेस को हर 1 मिनट में अपडेट करता है, ताकि स्टॉक से संबंधित जानकारी का उपयोग किया जा सके। अब हम किसी कंपनी के वास्तविक समय का परिदृश्य लेते हैं और देखते हैं कि जब स्टॉक का मूल्य 100 से नीचे चला जाता है तो अलर्ट कैसे बढ़ाएं।
सृजन करो
टोंटी का उद्देश्य कंपनी का विवरण प्राप्त करना और कीमतों को बोल्ट तक पहुंचाना है। टोंटी बनाने के लिए आप निम्न प्रोग्राम कोड का उपयोग कर सकते हैं।
कोडिंग: YahooFinanceSpout.java
import java.util.*;
import java.io.*;
import java.math.BigDecimal;
//import yahoofinace packages
import yahoofinance.YahooFinance;
import yahoofinance.Stock;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import backtype.storm.topology.IRichSpout;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.TopologyContext;
public class YahooFinanceSpout implements IRichSpout {
private SpoutOutputCollector collector;
private boolean completed = false;
private TopologyContext context;
@Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector){
this.context = context;
this.collector = collector;
}
@Override
public void nextTuple() {
try {
Stock stock = YahooFinance.get("INTC");
BigDecimal price = stock.getQuote().getPrice();
this.collector.emit(new Values("INTC", price.doubleValue()));
stock = YahooFinance.get("GOOGL");
price = stock.getQuote().getPrice();
this.collector.emit(new Values("GOOGL", price.doubleValue()));
stock = YahooFinance.get("AAPL");
price = stock.getQuote().getPrice();
this.collector.emit(new Values("AAPL", price.doubleValue()));
} catch(Exception e) {}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("company", "price"));
}
@Override
public void close() {}
public boolean isDistributed() {
return false;
}
@Override
public void activate() {}
@Override
public void deactivate() {}
@Override
public void ack(Object msgId) {}
@Override
public void fail(Object msgId) {}
@Override
public Map<String, Object> getComponentConfiguration() {
return null;
}
}
बोल्ट निर्माण
यहां बोल्ट का उद्देश्य दिए गए कंपनी के मूल्यों को संसाधित करना है जब कीमतें 100 से नीचे आती हैं। यह कटऑफ मूल्य सीमा चेतावनी को निर्धारित करने के लिए जावा मैप ऑब्जेक्ट का उपयोग करता है trueजब शेयर की कीमतें 100 से नीचे आती हैं; अन्यथा झूठ है। पूरा कार्यक्रम कोड इस प्रकार है -
कोडिंग: PriceCutOffBolt.java
import java.util.HashMap;
import java.util.Map;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.IRichBolt;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Tuple;
public class PriceCutOffBolt implements IRichBolt {
Map<String, Integer> cutOffMap;
Map<String, Boolean> resultMap;
private OutputCollector collector;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
this.cutOffMap = new HashMap <String, Integer>();
this.cutOffMap.put("INTC", 100);
this.cutOffMap.put("AAPL", 100);
this.cutOffMap.put("GOOGL", 100);
this.resultMap = new HashMap<String, Boolean>();
this.collector = collector;
}
@Override
public void execute(Tuple tuple) {
String company = tuple.getString(0);
Double price = tuple.getDouble(1);
if(this.cutOffMap.containsKey(company)){
Integer cutOffPrice = this.cutOffMap.get(company);
if(price < cutOffPrice) {
this.resultMap.put(company, true);
} else {
this.resultMap.put(company, false);
}
}
collector.ack(tuple);
}
@Override
public void cleanup() {
for(Map.Entry<String, Boolean> entry:resultMap.entrySet()){
System.out.println(entry.getKey()+" : " + entry.getValue());
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("cut_off_price"));
}
@Override
public Map<String, Object> getComponentConfiguration() {
return null;
}
}
टोपोलॉजी सबमिट करना
यह मुख्य एप्लिकेशन है जहां YahooFinanceSpout.java और PriceCutOffBolt.java एक साथ जुड़े हुए हैं और एक टोपोलॉजी का उत्पादन करते हैं। निम्न प्रोग्राम कोड दिखाता है कि आप टोपोलॉजी कैसे प्रस्तुत कर सकते हैं।
कोडिंग: YahooFinanceStorm.java
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.topology.TopologyBuilder;
public class YahooFinanceStorm {
public static void main(String[] args) throws Exception{
Config config = new Config();
config.setDebug(true);
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("yahoo-finance-spout", new YahooFinanceSpout());
builder.setBolt("price-cutoff-bolt", new PriceCutOffBolt())
.fieldsGrouping("yahoo-finance-spout", new Fields("company"));
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("YahooFinanceStorm", config, builder.createTopology());
Thread.sleep(10000);
cluster.shutdown();
}
}
बिल्डिंग और अनुप्रयोग चल रहा है
पूर्ण आवेदन में तीन जावा कोड हैं। वे इस प्रकार हैं -
- YahooFinanceSpout.java
- PriceCutOffBolt.java
- YahooFinanceStorm.java
आवेदन निम्नलिखित आदेश का उपयोग कर बनाया जा सकता है -
javac -cp “/path/to/storm/apache-storm-0.9.5/lib/*”:”/path/to/yahoofinance/lib/*” *.java
एप्लिकेशन को निम्न आदेश का उपयोग करके चलाया जा सकता है -
javac -cp “/path/to/storm/apache-storm-0.9.5/lib/*”:”/path/to/yahoofinance/lib/*”:.
YahooFinanceStorm
उत्पादन
आउटपुट निम्न के समान होगा -
GOOGL : false
AAPL : false
INTC : true