Yahoo - Api / Yql - hur lyckas ta data automatiskt? XML, XLS, CSV?

Permalänk
Medlem

Yahoo - Api / Yql - hur lyckas ta data automatiskt? XML, XLS, CSV?

Hej!

Jag håller på att programmera en sida och har nu en sak kvar, som jag har dragit i det längsta för att börja pilla med. Jag har verkligen ingen aning om hur jag ska göra och trots att jag läst en del guider så är det som kinesiska för mig.

Det är så att jag vill visa aktiekurser på min hemsida, via Yahoos API.

Jag har än så länge lyckats att skapa ett Excel-dokument där man kan ladda ned aktie-informationen till alla Large Cap-aktier genom ett knapptryck. XLS-dokumentet går att ladda ned här. Det enklaste för mig vore om det på något sätt hade gått att automatisera uppdateringen av detta dokument och sedan plocka datan ifrån dokumentet till min hemsida. Dock vet jag inte hur man ska göra det?

Jag har läst lite bloggar/guider
Getting stock information with YQL and open data tables och via den guiden kan jag exempelvis få fram dagsförändringen på ett par Large Cap-aktierna via;

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
yahoo:count="36" yahoo:created="2012-04-15T12:58:57Z" yahoo:lang="en-US">
<diagnostics>
<publiclyCallable>true</publiclyCallable>
<redirect from="http://datatables.org/alltables.env" status="301"><![CDATA[http://www.datatables.org/alltables.env]]></redirect>
<url execution-start-time="5" execution-stop-time="9"
execution-time="4" proxy="DEFAULT"><![CDATA[http://datatables.org/alltables.env]]></url>
<url execution-start-time="25" execution-stop-time="28"
execution-time="3" proxy="DEFAULT"><![CDATA[http://www.datatables.org/yahoo/finance/yahoo.finance.quotes....]]></url>
<url execution-start-time="101" execution-stop-time="160"
execution-time="59" proxy="DEFAULT"><![CDATA[http://download.finance.yahoo.com/d/quotes.csv?f=aa2bb2b3b4cc...]]></url>
<query execution-start-time="33" execution-stop-time="163"
execution-time="130" params="{url=[http://download.finance.yahoo.com/d/quotes.csv?f=aa2bb2b3b4cc...]}"><![CDATA[select * from csv where url=@url and columns='Ask,AverageDailyVolume,Bid,AskRealtime,BidRealtime,BookValue,Change&PercentChange,Change,Commission,ChangeRealtime,AfterHoursChangeRealtime,DividendShare,LastTradeDate,TradeDate,EarningsShare,ErrorIndicationreturnedforsymbolchangedinvalid,EPSEstimateCurrentYear,EPSEstimateNextYear,EPSEstimateNextQuarter,DaysLow,DaysHigh,YearLow,YearHigh,HoldingsGainPercent,AnnualizedGain,HoldingsGain,HoldingsGainPercentRealtime,HoldingsGainRealtime,MoreInfo,OrderBookRealtime,MarketCapitalization,MarketCapRealtime,EBITDA,ChangeFromYearLow,PercentChangeFromYearLow,LastTradeRealtimeWithTime,ChangePercentRealtime,ChangeFromYearHigh,PercebtChangeFromYearHigh,LastTradeWithTime,LastTradePriceOnly,HighLimit,LowLimit,DaysRange,DaysRangeRealtime,FiftydayMovingAverage,TwoHundreddayMovingAverage,ChangeFromTwoHundreddayMovingAverage,PercentChangeFromTwoHundreddayMovingAverage,ChangeFromFiftydayMovingAverage,PercentChangeFromFiftydayMovingAverage,Name,Notes,Open,PreviousClose,PricePaid,ChangeinPercent,PriceSales,PriceBook,ExDividendDate,PERatio,DividendPayDate,PERatioRealtime,PEGRatio,PriceEPSEstimateCurrentYear,PriceEPSEstimateNextYear,Symbol,SharesOwned,ShortRatio,LastTradeTime,TickerTrend,OneyrTargetPrice,Volume,HoldingsValue,HoldingsValueRealtime,YearRange,DaysValueChange,DaysValueChangeRealtime,StockExchange,DividendYield']]></query>
<javascript execution-time="420" instructions-used="6221943" table-name="yahoo.finance.quotes"/>
<user-time>461</user-time>
<service-time>66</service-time>
<build-version>26535</build-version>
</diagnostics>
<results>
<quote symbol="ABB.ST">
<Change>-2.90</Change>
</quote>
<quote symbol="ALFA.ST">
<Change>-2.30</Change>
</quote>
<quote symbol="AOIL-SDB.ST">
<Change>-0.10</Change>
</quote>
<quote symbol="ASSA-B.ST">
<Change>-6.10</Change>
</quote>
<quote symbol="AZN.ST">
<Change>-3.30</Change>
</quote>
<quote symbol="ATCO-A.ST">
<Change>-4.60</Change>
</quote>
<quote symbol="ATCO-B.ST">
<Change>-4.00</Change>
</quote>
<quote symbol="LJGR-B.ST">
<Change>0.00</Change>
</quote>
<quote symbol="ALIV-SDB.ST">
<Change>-5.10</Change>
</quote>
<quote symbol="AXFO.ST">
<Change>+1.30</Change>
</quote>
<quote symbol="BOL.ST">
<Change>-3.20</Change>
</quote>
<quote symbol="CAST.ST">
<Change>-1.45</Change>
</quote>
<quote symbol="ELUX-A.ST">
<Change>-4.50</Change>
</quote>
<quote symbol="ELUX-B.ST">
<Change>-2.40</Change>
</quote>
<quote symbol="EKTA-B.ST">
<Change>-2.50</Change>
</quote>
<quote symbol="ERIC-A.ST">
<Change>-1.60</Change>
</quote>
<quote symbol="ERIC-B.ST">
<Change>-1.90</Change>
</quote>
<quote symbol="FABG.ST">
<Change>-0.25</Change>
</quote>
<quote symbol="GETI-B.ST">
<Change>-2.30</Change>
</quote>
<quote symbol="HM-B.ST">
<Change>-3.70</Change>
</quote>
<quote symbol="HAKN.ST">
<Change>+1.00</Change>
</quote>
<quote symbol="SHB-A.ST">
<Change>-6.40</Change>
</quote>
<quote symbol="SHB-B.ST">
<Change>-4.20</Change>
</quote>
<quote symbol="HEXA-B.ST">
<Change>-1.90</Change>
</quote>
<quote symbol="HOLM-A.ST">
<Change>+4.20</Change>
</quote>
<quote symbol="HOLM-B.ST">
<Change>-1.70</Change>
</quote>
<quote symbol="HUFV-A.ST">
<Change>-0.55</Change>
</quote>
<quote symbol="HUFV-C.ST">
<Change>0.00</Change>
</quote>
<quote symbol="HUSQ-A.ST">
<Change>-0.57</Change>
</quote>
<quote symbol="HUSQ-B.ST">
<Change>-0.31</Change>
</quote>
<quote symbol="ST">
<Change>-0.06</Change>
</quote>
<quote symbol="ST">
<Change>-0.06</Change>
</quote>
<quote symbol="INVE-A.ST">
<Change>-2.60</Change>
</quote>
<quote symbol="INVE-B.ST">
<Change>-3.50</Change>
</quote>
<quote symbol="KINV-A.ST">
<Change>-0.80</Change>
</quote>
<quote symbol="KINV-B.ST">
<Change>-2.50</Change>
</quote>
</results>
</query>

Dold text

Jag vet dock inte var jag ska göra av denna data, i vilket format/språk? Och hur får man den att uppdateras automatiskt? Jag läste om någon sorts "key" som man får via Yahoo, som tillåter en att "kalla" på datan 1000 gånger per dag.

Jag har även läst dessa två korta blogginläggen;
Get near Real-Time Stock Data From Yahoo Finance
Using the Yahoo Finance API for CSV

Jag vore väldigt tacksam om någon hade kunnat ge mig lite hintar om hur jag ska fortsätta från där jag nu fastnat. Tack på förhand!

Permalänk
Medlem
Skrivet av Marmoth:

Jag vore väldigt tacksam om någon hade kunnat ge mig lite hintar om hur jag ska fortsätta från där jag nu fastnat. Tack på förhand!

På något sätt måste du tolka xml dokumentet du får tillbaks, det finns xml-funktionalitet i/till de flesta moderna programmeringsspråk.

Sen har vi ju problemet med att hur många gånger man får anropa Yahoo Finances API. Så här rakt upp och ner kommer jag på ett par olika lösningar:

  • Hämta data från Yahoo med hjälp av JavaScript på klienten och hoppas på att ingen sitter och reloadar sidan.

  • En process som med jämna mellanrum hämtar data från Yahoo och cache:ar dom lokalt. Det kräver något slags timer-jobb eller möjligen en process/demon som hämtar data för att sedan somna en förutbestämd tid och hämta data igen.

  • Lokal cache som uppdateras när sidan hämtas om cachens data är mer än t (valfria) tidsenheter gammalt.

Permalänk
Medlem
Skrivet av Fnorken:

På något sätt måste du tolka xml dokumentet du får tillbaks, det finns xml-funktionalitet i/till de flesta moderna programmeringsspråk.

Sen har vi ju problemet med att hur många gånger man får anropa Yahoo Finances API. Så här rakt upp och ner kommer jag på ett par olika lösningar:

  • Hämta data från Yahoo med hjälp av JavaScript på klienten och hoppas på att ingen sitter och reloadar sidan.

  • En process som med jämna mellanrum hämtar data från Yahoo och cache:ar dom lokalt. Det kräver något slags timer-jobb eller möjligen en process/demon som hämtar data för att sedan somna en förutbestämd tid och hämta data igen.

  • Lokal cache som uppdateras när sidan hämtas om cachens data är mer än t (valfria) tidsenheter gammalt.

Tack för svaret.

Jag hade tänkt tolka det till PHP, men har inte riktigt kommit på hur jag ska göra det.

Vilket av dina förslag är enklast att genomföra? Med deras API (jag vet inte riktigt vad API innebär egentligen) får man hämta 1000 gånger per dag. Så det mest optimala för mig är ju att jag, dvs min server, hämtar datan en gång i minuten eller liknande. Och sen får mina besökare tillgång till den datan som uppdateras en gång i minuten.

Innebär API att varje användarbesök räknas som ett anrop? Man kanske inte får göra så att min server räknas som ett anrop och att min server sedan visardistribuerar datan? Vad innebär en sån där "API-key" som man kan få? Det känns som man kan rund-gå detta oavsett vad.

Jag har en vän som sysslar med webbutveckling och efter att ha pratat med honom idag ska han hjälpa mig. Men vet du om det är lätt att fixa en process, eller ett tillvägagångssätt som ditt andra och tredje förslag innebär?

Här är den XML-fil som jag vill anropa:
YAHOO-XML

Mvh

Permalänk
Medlem
Skrivet av Marmoth:

Jag har en vän som sysslar med webbutveckling och efter att ha pratat med honom idag ska han hjälpa mig. Men vet du om det är lätt att fixa en process, eller ett tillvägagångssätt som ditt andra och tredje förslag innebär?

Direkt svårt är det väl inte. Men det kräver mer än nybörjarkunskaper och lite erfarenhet för att få det bra. Hur går det?

Permalänk
Medlem
Skrivet av Fnorken:

Direkt svårt är det väl inte. Men det kräver mer än nybörjarkunskaper och lite erfarenhet för att få det bra. Hur går det?

Ska träffa min polare på fredag. Om vi inte lyckas, finns det en möjlighet att jag hade kunnat ge dig en slant för att skapa en process som fungerar som det andra eller tredje förslaget du skrev tidigare ?

Permalänk
Medlem

Läs på om SimpleXML (eller annat som du kan använda för XML i PHP). Sen kan du ha en kort caching på t.ex 1-5 minuter (eller längre om det går bra).
Annars kan du använda Javascript/jQuery så får PHP agera mellanhand.

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av Snacker:

Läs på om SimpleXML (eller annat som du kan använda för XML i PHP). Sen kan du ha en kort caching på t.ex 1-5 minuter (eller längre om det går bra).
Annars kan du använda Javascript/jQuery så får PHP agera mellanhand.

Skickades från m.sweclockers.com

Går det att göra så att det är det är mitt(webserverns) anrop som räknas som ett anrop av Yahoo? Eller kommer varje enskilda besökare som klickar in på min sida räknas som ett anrop om jag använder SimpleXML?

Jag vill att datan i tabellen på min hemsida ska uppdateras av mitt anrop (1-2 minuters mellanrum) och att mina besökare enbart ser uppdaterad data när min dator gjort ett anrop.

Mvh

Permalänk

Tror det du söker är ett cron job eller liknande som sparar datan i en databas var annan minut.
Sedan hämtar du datan från tabellen varje gång någon besöker sidan.
Inte alls svårt att genomföra, förutsatt att besökaren måste ladda om sidan för att hämta datan som uppdateras varannan minut.
SimpleXML är, som namnet antyder, lätt att jobba med. Börjar du själv så får du säkert den hjälp du behöver här.

Permalänk
Medlem
Skrivet av Marmoth:

Går det att göra så att det är det är mitt(webserverns) anrop som räknas som ett anrop av Yahoo? Eller kommer varje enskilda besökare som klickar in på min sida räknas som ett anrop om jag använder SimpleXML?

Jag vill att datan i tabellen på min hemsida ska uppdateras av mitt anrop (1-2 minuters mellanrum) och att mina besökare enbart ser uppdaterad data när min dator gjort ett anrop.

Mvh

SimpleXML gör nog det du vill ha. Dessutom skulle jag föredra caching med PHP framför cron jobs, då slipper du onödiga requests.