याहू में अपाचे तूफान! वित्त

याहू! वित्त इंटरनेट की प्रमुख व्यावसायिक समाचार और वित्तीय डेटा वेबसाइट है। यह याहू का एक हिस्सा है! और वित्तीय समाचार, बाजार के आंकड़े, अंतर्राष्ट्रीय बाजार के आंकड़ों और वित्तीय संसाधनों के बारे में अन्य जानकारी के बारे में जानकारी देता है जिसे कोई भी उपयोग कर सकता है।

यदि आप एक पंजीकृत याहू हैं! उपयोगकर्ता, तो आप याहू अनुकूलित कर सकते हैं! इसके निश्चित प्रसाद का लाभ उठाने के लिए वित्त। याहू! वित्त एपीआई याहू से वित्तीय डेटा क्वेरी करने के लिए प्रयोग किया जाता है!

यह एपीआई वास्तविक समय से 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