<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brusdeylins &#187; Projekt</title>
	<atom:link href="http://brusdeylins.info/tag/projekt/feed/" rel="self" type="application/rss+xml" />
	<link>http://brusdeylins.info</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 18:25:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Yahoo! Finance API</title>
		<link>http://brusdeylins.info/projects/yahoo-finance-api/</link>
		<comments>http://brusdeylins.info/projects/yahoo-finance-api/#comments</comments>
		<pubDate>Sun, 18 May 2008 17:20:34 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Finance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.brusdeylins.info/projects/yahoo-finance-api/</guid>
		<description><![CDATA[
F&#252;r das Ermitteln unterschiedlicher Kursdaten bietet Yahoo!Finance (auch f&#252;r Deutschland) verschiedene CSV-Export-Services an. CSV steht f&#252;r &#8220;Comma Separated Values&#8221; und bedeutet hier nichts anderes, als dass die ganzen Kennzahlen (wie z.B. Schluss-Kurs oder Volumen) in reiner Textform mit Kommas   und Zeilenumbr&#252;chen getrennt ausgeliefert werden. Daten in solch einem Format kann ein Computerprogramm f&#252;r [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->
<a href="http://brusdeylins.info/media/post-images/yahoo-finance.jpg" title="Yahoo-Finance API" rel="lightbox[singlepic39]" >
	<img class="ngg-singlepic ngg-right" src="http://brusdeylins.info/media/cache/39__150x240_yahoo-finance.jpg" alt="Yahoo-Finance API" title="Yahoo-Finance API" />
</a>
Moderne Broker-Portale bieten einem Investor die M&#246;glichkeit, Kurse seiner Aktien bzw. Optionen abzurufen. Dort findet er in der Regel auch Kurs-Charts und Chart-Analyse-Kurven zu den unterschiedlichsten Zeitr&#228;umen. Dem ein oder anderen privaten Investor sind diese Analysen vielleicht nicht ausreichend genug. Es mag unter ihnen Informatiker und Hobby-Programmierer geben, die den Wunsch &#228;u&#223;ern, mit Kursdaten mathematische Analysen durchzuf&#252;hren, um Indikatoren selbst zu berechnen. Nur wie gelangt ein Programmierer an die aktuellen und historischen Zahlen einzelner Aktienkurse? Dieser Beitrag soll die M&#246;glichkeiten der Yahoo!Finance-Schnittstelle n&#228;her bringen.<!--:--><span id="more-41"></span><!--:de--></p>
<p>F&#252;r das Ermitteln unterschiedlicher Kursdaten bietet <a href="http://finance.yahoo.com/" target="_blank">Yahoo!Finance</a> (<a href="http://de.finance.yahoo.com/" target="_blank">auch f&#252;r Deutschland</a>) verschiedene CSV-Export-Services an. CSV steht f&#252;r &#8220;Comma Separated Values&#8221; und bedeutet hier nichts anderes, als dass die ganzen Kennzahlen (wie z.B. Schluss-Kurs oder Volumen) in reiner Textform mit Kommas   und Zeilenumbr&#252;chen getrennt ausgeliefert werden. Daten in solch einem Format kann ein Computerprogramm f&#252;r Analysezwecke leicht verarbeiten. Im Folgenden werden die bekannten Schnittstellen genauer erl&#228;utert und dazu passende Beispiele und PHP-Scripte pr&#228;sentiert. Da mir keine offizielle API von Yahoo!Finance bekannt ist und ich die hier beschriebene Schnittstelle durch Ausprobieren und Studium ermittelt habe, kann ich f&#252;r eine Vollst&#228;ndigkeit des aufgezeigten Funktionsumfanges nicht garantieren. F&#252;r Hinweise bin ich daher sehr dankbar. Verwendet ein Entwickler die Services von Yahoo!Finance, so sollte er sich vorher die <a href="http://developer.yahoo.com/usagePolicy/" target="_blank">Nutzungsbedingungen</a> (<a href="http://info.yahoo.com/guidelines/us/yahoo/ydn/ydn-3955.html" target="_blank">siehe auch</a>) genau durchlesen.</p>
<h2>Aktuelle Kursdaten ermitteln</h2>
<p>Ganz ehrlich, &#8220;aktuell&#8221; bedeutet bei der kostenlosen Yahoo!Finance-Schnittstelle leider eine Verz&#246;gerung von 15 Minuten f&#252;r NASDAQ Werte, bis hin zu 60 Minuten f&#252;r andere B&#246;rsenpl&#228;tze (<a href="http://de.biz.yahoo.com/sd/index.html" target="_blank">n&#228;heres auf Yahoo!Finance</a>). Doch f&#252;r die meisten Verwendungszwecken bzw. westlichen B&#246;rsenkurse d&#252;rfte diese Verz&#246;gerung kein Problem darstellen. Yahoo! bietet Kurse aus den unterschiedlichsten B&#246;rsenpl&#228;tzen an. Die Selektion des entsprechenden Handelsplatzes findet in der URL selbst, sowie in einem Anhang (Suffix) an der Symbolangabe statt. Im Kapitel &#8220;L&#228;nderunterschiede&#8221; werden die Unterschiede aufgelistet. Zum besseren Verst&#228;ndnis zeige ich hier nur die Basis-URL, welche vor allem f&#252;r die US-B&#246;rsenkurse g&#252;ltig ist. Das Ergebnis ist eine Werteliste, die durch Kommas getrennt pr&#228;sentiert wird. Die Serviceadressen f&#252;r aktuelle Kursinformationen lautet <code>http://finance.yahoo.com/d/quotes.csv?</code> und nimmt die folgenden drei bekannten Parameter entgegen:</p>
<table class="full" border="0">
<tbody>
<tr>
<th>Parameter</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>s=</td>
<td>Das <strong>Symbol</strong> des Wertpapiers wird mit dem Parameter &#8220;s&#8221; angegeben. Z.B. liefert hier &#8220;<code>s=AAPL</code>&#8221; die aktuellen Kursdaten von Apple Inc. Eine Kombination mehrere durch ein Pluszeichen getrennte Symbole ist ebenfalls m&#246;glich (zum Beispiel &#8220;<code>s=AAPL+MSFT</code>&#8221; f&#252;r Apple und Microsoft). Die Werte, getrennt durch Kommas, kommen dann jeweils in eine separaten Zeile pro Symbol zur&#252;ck.</td>
</tr>
<tr>
<td>f=</td>
<td><strong>Die Format-Codes</strong> werden hier mit dem Parameter &#8220;f&#8221; angegeben. Dabei handelt es sich hier um einen Textzug mit lauter aneinandergereihten K&#252;rzel. So gibt z.B. das Zeichen &#8220;s&#8221; an, dass das Symbol der Aktie ausgegeben werden soll. &#8220;n&#8221; liefert den Namen, &#8220;a&#8221; den aktuellen Anfrage-Kurs. Die Werte werden exakt in der Reihenfolge ausgegeben, wie sie hier angefordert werden. Eine Liste aller bekannten Format-Codes wird weiter unten um Kapitel &#8220;Die Format-Codes&#8221; aufgelistet. Beispiel: <code>f=sna</code></td>
</tr>
<tr>
<td>e=.cvs</td>
<td>Die <strong>Exportart</strong> wird mit dem Parameter &#8220;e&#8221; angegeben. Hier sollte immer &#8220;<code>e=.csv</code>&#8221; f&#252;r ein &#8220;Comma Separated Values&#8221; Ergebnis &#252;bermittelt werden. Erfahrungen haben gezeigt, dass dieser Parameter wohl optional ist.</td>
</tr>
</tbody>
</table>
<p>Das folgende Beispiel ermittelt von Apple und Microsoft das Symbol, den Firmen-Namen, den aktuellen Anfrage-Kurs und die dazu geh&#246;rige Zeit ab. Dabei sind Zeit und Kurswert immer l&#228;nderspezifisch zu verstehen (US-Zeit und Dollar). Wenn Sie diese URL in den Browser eingeben, k&#246;nnen Sie das Ergebnis abspeichern. Danach k&#246;nnen Sie die Rohdaten in einem Texteditor &#246;ffnen und betrachten (nicht mit Excel &#246;ffnen, da hier die Formatierung nicht ersichtlich wird).</p>
<pre>http://finance.yahoo.com/d/quotes.csv?s=AAPL+MSFT&amp;f=snat1
---
"AAPL","APPLE INC",151.47,"3:31pm"
"MSFT","MICROSOFT CP",29.09,"3:31pm"</pre>
<p>Ein Programm kann nun diese Daten in einem mehrdimensionalen Array ablegen. Dabei enthalten die Spalten die Inhalte der Werte, welche durch die Format-Codes angefordert wurden. Die Zeilen bilden jeweils das Zahlentupel eines Wertpapiers ab. Eine PHP-Funktion zur Ermittlung der Kursdaten k&#246;nnte somit folgenderma&#223;en aussehen:</p>
<pre>&lt;?php
    /*
     * Getting current quotes:
     * Reading multible lines of values into an array depending on the given symbols and function tags.
     * Each line holds the values of one symbol. In the argument, symbols are separated by "+".
     *
     * (c) Matthias Brusdeylins, 2008
     * License: CC-GNU GPL (http://creativecommons.org/licenses/GPL/2.0/)
     */    

    define ("QUOTES_URL", "http://finance.yahoo.com/d/quotes.csv?");
    function loadYahooQuotes ($symbol,
                              $tags)
    {
        $lineCount = 0;
        $stocks = array();

        // load the stock quotes: we are opening it for reading
        // http://finance.yahoo.com/d/quotes.csv?s=  STOCK SYMBOLS  &amp;f=  FORMAT TAGS
        $URL = QUOTES_URL."s=$symbol&amp;f=$tags&amp;e=.csv";
        $fileHandle = fopen ($URL,"r");

        if ($fileHandle) {
            // use the fgetcsv function to store quote values into an array $lineValues
            // one symbol in one line
            do {
                $stockValues = fgetcsv ($fileHandle, 999999, ",");
                if ($stockValues) {
                    $lineCount++;
                    $stocks[$lineCount] = $stockValues;
                }
            } while ($stockValues);

        fclose ($fileHandle);
        } else {
            // ERROR-Message in the array
            $stocks[0][0] = "ERROR";
            $stocks[0][1] = "No data found.";
        }

        return $stocks;
    }
?&gt;</pre>
<h2>Devisen</h2>
<p>Sie k&#246;nnen nicht nur einzelne Aktienkurse erfragen, sondern auch Devisenkurse. Dazu m&#252;ssen Sie an der oben vorgestellten Adresse als Symbol-Parameter ein spezielles Konstrukt der Form <code>AB=X</code> &#252;bermitteln. Hier steht der Buchstabe <code>A</code> f&#252;r die erste zu vergleichende W&#228;hrung und der Buchstabe <code>B</code> dann nat&#252;rlich f&#252;r die zweite W&#228;hrung.  <code>X</code> steht wohl f&#252;r Exchange und wird nicht ersetzt. Wollen Sie mehrere W&#228;hrungen abfragen, k&#246;nnen mehrere Konstrukte mittels dem Pluszeichen &#8220;<code>+</code>&#8221; aneinander geh&#228;ngt werden. Folgendes Beispiel soll dies verdeutlichen:</p>
<pre>http://quote.yahoo.com/d/quotes.csv?s=USDCAD=X+JPYUSD=X&amp;f=nl1d1t1
---
"USD to CAD",1.0088,"4/4/2008","5:02pm"
"JPY to USD",0.0098,"4/4/2008","5:26pm"</pre>
<p>Die K&#252;rzel der W&#228;hrungen bestehen aus drei Buchstaben und werden hier aufgelistet:</p>
<table class="full" border="0">
<tbody>
<tr>
<th>Land</th>
<th width="20%">K&#252;rzel</th>
</tr>
<tr>
<td>Afganistan Afghani</td>
<td>AFA</td>
</tr>
<tr>
<td>Albanian Lek</td>
<td>ALL</td>
</tr>
<tr>
<td>Algerian Dinar</td>
<td>DZD</td>
</tr>
<tr>
<td>Argentinian Peso</td>
<td>ARS</td>
</tr>
<tr>
<td>Aruban Florin</td>
<td>AWG</td>
</tr>
<tr>
<td>Australian Dollar</td>
<td>AUD</td>
</tr>
<tr>
<td>Austrian Schilling</td>
<td>ATS</td>
</tr>
<tr>
<td>Bahraini Dinar</td>
<td>BHD</td>
</tr>
<tr>
<td>Bangladesh Taka</td>
<td>BDT</td>
</tr>
<tr>
<td>Barbados Dollar</td>
<td>BBD</td>
</tr>
<tr>
<td>Belgian Franc</td>
<td>BEF</td>
</tr>
<tr>
<td>Belize Dollar</td>
<td>BZD</td>
</tr>
<tr>
<td>Bermuda Dollar</td>
<td>BMD</td>
</tr>
<tr>
<td>Bhutan Ngultrum</td>
<td>BTN</td>
</tr>
<tr>
<td>Bolivian Boliviano</td>
<td>BOB</td>
</tr>
<tr>
<td>Botswana Pula</td>
<td>BWP</td>
</tr>
<tr>
<td>Brazilian Real</td>
<td>BRL</td>
</tr>
<tr>
<td>British Pound</td>
<td>GBP</td>
</tr>
<tr>
<td>Brunei Dollar</td>
<td>BND</td>
</tr>
<tr>
<td>Bulgarian Lev</td>
<td>BGN</td>
</tr>
<tr>
<td>Cambodian Riel</td>
<td>KHR</td>
</tr>
<tr>
<td>Canadian Dollar</td>
<td>CAD</td>
</tr>
<tr>
<td>Cape Verde Escudo</td>
<td>CVE</td>
</tr>
<tr>
<td>Cayman Islands Dollar</td>
<td>KYD</td>
</tr>
<tr>
<td>CFA Franc (BCEAO)</td>
<td>XOF</td>
</tr>
<tr>
<td>CFA Franc(BEAC)</td>
<td>XAF</td>
</tr>
<tr>
<td>CFP Franc</td>
<td>XPF</td>
</tr>
<tr>
<td>Chilean Peso</td>
<td>CLP</td>
</tr>
<tr>
<td>Colombian Peso</td>
<td>COP</td>
</tr>
<tr>
<td>Comoros Franc</td>
<td>KMF</td>
</tr>
<tr>
<td>Costa Rican Colon</td>
<td>CRC</td>
</tr>
<tr>
<td>Croatian Kuna</td>
<td>HRK</td>
</tr>
<tr>
<td>Cuban Peso</td>
<td>CUP</td>
</tr>
<tr>
<td>Cypriot Pound</td>
<td>CYP</td>
</tr>
<tr>
<td>Czech Koruna</td>
<td>CZK</td>
</tr>
<tr>
<td>Danish Krone</td>
<td>DKK</td>
</tr>
<tr>
<td>Djibouti Franc</td>
<td>DJF</td>
</tr>
<tr>
<td>Dominican Peso</td>
<td>DOP</td>
</tr>
<tr>
<td>Dutch Guilder</td>
<td>NLG</td>
</tr>
<tr>
<td>East Caribbean Dollar</td>
<td>XCD</td>
</tr>
<tr>
<td>Egyptian Pound</td>
<td>EGP</td>
</tr>
<tr>
<td>El Salvador Colon</td>
<td>SVC</td>
</tr>
<tr>
<td>Estonian Kroon</td>
<td>EEK</td>
</tr>
<tr>
<td>Ethiopian Birr</td>
<td>ETB</td>
</tr>
<tr>
<td>Euro</td>
<td>EUR</td>
</tr>
<tr>
<td>Fiji Dollar</td>
<td>FJD</td>
</tr>
<tr>
<td>Finnish Markka</td>
<td>FIM</td>
</tr>
<tr>
<td>French Franc</td>
<td>FRF</td>
</tr>
<tr>
<td>Gambia Dalasi</td>
<td>GMD</td>
</tr>
<tr>
<td>German Mark</td>
<td>DEM</td>
</tr>
<tr>
<td>Ghanaian Cedi</td>
<td>GHC</td>
</tr>
<tr>
<td>Gibraltar Pound</td>
<td>GIP</td>
</tr>
<tr>
<td>Greek Drachma</td>
<td>GRD</td>
</tr>
<tr>
<td>Guatemala Quetzal</td>
<td>GTQ</td>
</tr>
<tr>
<td>Guinea Franc</td>
<td>GNF</td>
</tr>
<tr>
<td>Guyana Dollar</td>
<td>GYD</td>
</tr>
<tr>
<td>Haitian Gourde</td>
<td>HTG</td>
</tr>
<tr>
<td>Honduras Lempira</td>
<td>HNL</td>
</tr>
<tr>
<td>Hong Kong Dollar</td>
<td>HKD</td>
</tr>
<tr>
<td>Hungarian Forint</td>
<td>HUF</td>
</tr>
<tr>
<td>Iceland Krona</td>
<td>ISK</td>
</tr>
<tr>
<td>Indian Rupee</td>
<td>INR</td>
</tr>
<tr>
<td>Indonesian Rupiah</td>
<td>IDR</td>
</tr>
<tr>
<td>Irish Punt</td>
<td>IEP</td>
</tr>
<tr>
<td>Israeli Shekel</td>
<td>ILS</td>
</tr>
<tr>
<td>Italian Lira</td>
<td>ITL</td>
</tr>
<tr>
<td>Jamaican Dollar</td>
<td>JMD</td>
</tr>
<tr>
<td>Japanese Yen</td>
<td>JPY</td>
</tr>
<tr>
<td>Jordanian Dinar</td>
<td>JOD</td>
</tr>
<tr>
<td>Kenyan Shilling</td>
<td>KES</td>
</tr>
<tr>
<td>Kuwaiti Dinar</td>
<td>KWD</td>
</tr>
<tr>
<td>Laos Kip</td>
<td>LAK</td>
</tr>
<tr>
<td>Latvian Lats</td>
<td>LVL</td>
</tr>
<tr>
<td>Lebanese Pound</td>
<td>LBP</td>
</tr>
<tr>
<td>Lesotho Loti</td>
<td>LSL</td>
</tr>
<tr>
<td>Lithuanian Litas</td>
<td>LTL</td>
</tr>
<tr>
<td>Malagasy Franc</td>
<td>MGF</td>
</tr>
<tr>
<td>Malawi Kwacha</td>
<td>MWK</td>
</tr>
<tr>
<td>Malaysian Ringgit</td>
<td>MYR</td>
</tr>
<tr>
<td>Maldives Rufiyan</td>
<td>MVR</td>
</tr>
<tr>
<td>Maltese Pound</td>
<td>MTL</td>
</tr>
<tr>
<td>Mauritania Ouguiya</td>
<td>MRO</td>
</tr>
<tr>
<td>Mauritius Rupee</td>
<td>MUR</td>
</tr>
<tr>
<td>Mexican Peso</td>
<td>MXN</td>
</tr>
<tr>
<td>Mongolian Tugrik</td>
<td>MNT</td>
</tr>
<tr>
<td>Moroccan Dirham</td>
<td>MAD</td>
</tr>
<tr>
<td>Mozambique Metical</td>
<td>MZM</td>
</tr>
<tr>
<td>Myanmar Kyat</td>
<td>MMK</td>
</tr>
<tr>
<td>Namibian Dollar</td>
<td>NAD</td>
</tr>
<tr>
<td>Nepal Rupee</td>
<td>NPR</td>
</tr>
<tr>
<td>Netherlands Antilles Guilder</td>
<td>ANG</td>
</tr>
<tr>
<td>New Zealand Dollar</td>
<td>NZD</td>
</tr>
<tr>
<td>Nicaraguan Cordoba</td>
<td>NIO</td>
</tr>
<tr>
<td>Nigerian Naira</td>
<td>NGN</td>
</tr>
<tr>
<td>Norwegian Krone</td>
<td>NOK</td>
</tr>
<tr>
<td>Oman Rial</td>
<td>OMR</td>
</tr>
<tr>
<td>Pakistani Rupee</td>
<td>PKR</td>
</tr>
<tr>
<td>Papua New Guinea Kina</td>
<td>PGK</td>
</tr>
<tr>
<td>Peruvian Sol</td>
<td>PEN</td>
</tr>
<tr>
<td>Philippines Peso</td>
<td>PHP</td>
</tr>
<tr>
<td>Polish Zloty</td>
<td>PLN</td>
</tr>
<tr>
<td>Portuguese Escudo</td>
<td>PTE</td>
</tr>
<tr>
<td>Qatari Rial</td>
<td>QAR</td>
</tr>
<tr>
<td>Renmimbi Yuan</td>
<td>CNY</td>
</tr>
<tr>
<td>Romanian Leu</td>
<td>ROL</td>
</tr>
<tr>
<td>Russian Ruble</td>
<td>RUB</td>
</tr>
<tr>
<td>Salomon Islands Dollar</td>
<td>SBD</td>
</tr>
<tr>
<td>Sao Tome &amp; Principe Dobra</td>
<td>STD</td>
</tr>
<tr>
<td>Saudi Arabian Riyal</td>
<td>SAR</td>
</tr>
<tr>
<td>Seychelles Rupee</td>
<td>SCR</td>
</tr>
<tr>
<td>Sierra Leone Leone</td>
<td>SLL</td>
</tr>
<tr>
<td>Singapore Dollar</td>
<td>SGD</td>
</tr>
<tr>
<td>Slovak Koruna</td>
<td>SKK</td>
</tr>
<tr>
<td>Slovenian Tolar</td>
<td>SIT</td>
</tr>
<tr>
<td>South African Rand</td>
<td>ZAR</td>
</tr>
<tr>
<td>South Korean Won</td>
<td>KRW</td>
</tr>
<tr>
<td>Spanish Peseta</td>
<td>ESP</td>
</tr>
<tr>
<td>Sri Lanka Rupee</td>
<td>LKR</td>
</tr>
<tr>
<td>St. Helena Pound</td>
<td>SHP</td>
</tr>
<tr>
<td>Sudanese Dinar</td>
<td>SDD</td>
</tr>
<tr>
<td>Surinam Guilder</td>
<td>SRG</td>
</tr>
<tr>
<td>Swaziland Lilangeni</td>
<td>SZL</td>
</tr>
<tr>
<td>Swedish Krona</td>
<td>SEK</td>
</tr>
<tr>
<td>Swiss Franc</td>
<td>CHF</td>
</tr>
<tr>
<td>Syria Pound</td>
<td>SYP</td>
</tr>
<tr>
<td>Taiwan New Dollar</td>
<td>TWD</td>
</tr>
<tr>
<td>Tanzanian Shilling</td>
<td>TZS</td>
</tr>
<tr>
<td>Thai Baht</td>
<td>THB</td>
</tr>
<tr>
<td>Tonga Isl Pa’anga</td>
<td>TOP</td>
</tr>
<tr>
<td>Trinidad Dollar</td>
<td>TTD</td>
</tr>
<tr>
<td>Tunisian Dinar</td>
<td>TND</td>
</tr>
<tr>
<td>Turkish Lira</td>
<td>TRL</td>
</tr>
<tr>
<td>Ugandan Shilling</td>
<td>UGX</td>
</tr>
<tr>
<td>Ukraine Hryvnia</td>
<td>UAH</td>
</tr>
<tr>
<td>United Arab Emirates Dirham</td>
<td>AED</td>
</tr>
<tr>
<td>US Dollar</td>
<td>USD</td>
</tr>
<tr>
<td>Vanuatu Vatu</td>
<td>VUV</td>
</tr>
<tr>
<td>Venezuelan Bolivar</td>
<td>VEB</td>
</tr>
<tr>
<td>Vietnam Dong</td>
<td>VND</td>
</tr>
<tr>
<td>Western Samoa Tala</td>
<td>WST</td>
</tr>
<tr>
<td>Zambia Kwacha</td>
<td>ZMK</td>
</tr>
<tr>
<td>Zimbabwean Dollar</td>
<td>ZWD</td>
</tr>
</tbody>
</table>
<h2>Die Format-Codes</h2>
<p>F&#252;r den Parameter der Formate-Codes (”f”) stehen eine ganze Reihe akzeptierter Format-Tags zur Verf&#252;gung. Viele sind dabei wohl redundant und werden hier einfach zusammengefasst (z.B. “a” und “b2″ f&#252;r Anfrage-Kurs). Die folgende Tabelle listet alle bekannten Codes auf.</p>
<p><strong>Achtung: </strong>In einigen F&#228;llen liefert Yahoo!Finance mehrstellige Werte zur&#252;ck, die ebenfalls mit Kommas getrennt dargestellt werden. Dies ist an sich ungeschickt, da es f&#252;r Sie als Programmierer schwierig wird, die Kommas zwischen den einzelnen Werten von den Kommas in einem Wert zu unterscheiden. Hier empfehle ich, diese Parameter getrennt abzufragen.</p>
<table class="full" border="0">
<tbody>
<tr>
<th width="20%">Code</th>
<th>Bedeutung</th>
</tr>
<tr>
<td>a, a0, a4</td>
<td>Ask (sometimes) &#8211; Nicht alle Kursanfragen liefern hier einen Wert.</td>
</tr>
<tr>
<td>a3, b2</td>
<td>Ask &#8211; incl. Pre- und Post-Market Werte</td>
</tr>
<tr>
<td>a1</td>
<td>- unknown -</td>
</tr>
<tr>
<td>a2</td>
<td>Average Daily Volume</td>
</tr>
<tr>
<td valign="top">a5</td>
<td valign="top">Ask Size</p>
<p><strong>Achtung:</strong> hier wird der Wert unter Umst&#228;nden in Zahlengruppen, getrennt durch ein Komma zur&#252;ckgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.</td>
</tr>
<tr>
<td>b, b0</td>
<td>Bid (sometimes) &#8211; Nicht alle Kursanfragen liefern hier einen Wert.</td>
</tr>
<tr>
<td>b1, b3</td>
<td>Bid &#8211; incl. Pre- und Post-Market Werte</td>
</tr>
<tr>
<td>b4</td>
<td>Book Value</td>
</tr>
<tr>
<td valign="top">b6</td>
<td valign="top">Bid Size</p>
<p><strong>Achtung:</strong> hier wird der Wert unter Umst&#228;nden in Zahlengruppen, getrennt durch ein Komma zur&#252;ckgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.</td>
</tr>
<tr>
<td>c, c2, q1</td>
<td>Change &amp; Percent Change</td>
</tr>
<tr>
<td>c1, c0, c6, c7</td>
<td>Change</td>
</tr>
<tr>
<td>c3</td>
<td>Commission</td>
</tr>
<tr>
<td>c4</td>
<td>Currency</td>
</tr>
<tr>
<td>c5</td>
<td>- unknown -</td>
</tr>
<tr>
<td valign="top">c8</td>
<td valign="top">After Hours Change</td>
</tr>
<tr>
<td valign="top">d, d0</td>
<td valign="top">Dividend/Share</td>
</tr>
<tr>
<td valign="top">d1</td>
<td valign="top">Last Trade Date</td>
</tr>
<tr>
<td valign="top">d2</td>
<td valign="top">Trade Date</td>
</tr>
<tr>
<td>d3</td>
<td>Last Trade Date (text)</td>
</tr>
<tr>
<td valign="top">e, e0</td>
<td valign="top">Earnings/Share</td>
</tr>
<tr>
<td valign="top">e1</td>
<td valign="top">Error Indication (returned for symbol changed / invalid)</td>
</tr>
<tr>
<td>e2</td>
<td>Verfallsdatum bei Optionsscheinen</td>
</tr>
<tr>
<td>e3</td>
<td>- unknown -</td>
</tr>
<tr>
<td>e4</td>
<td>- unknown -</td>
</tr>
<tr>
<td valign="top">e7</td>
<td valign="top">EPS Estimate Current Year</td>
</tr>
<tr>
<td valign="top">e8</td>
<td valign="top">EPS Estimate Next Year</td>
</tr>
<tr>
<td valign="top">e9</td>
<td valign="top">EPS Estimate Next Quarter</td>
</tr>
<tr>
<td>f, f0, f1, f2, f3, f4, f5, g2</td>
<td><em>- HTML Fragment mit Company name, market place und Trade Link -</em></td>
</tr>
<tr>
<td valign="top">f6</td>
<td valign="top">Float Shares</p>
<p><strong>Achtung:</strong> hier wird der Wert unter Umst&#228;nden in Zahlengruppen, getrennt durch ein Komma zur&#252;ckgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.</td>
</tr>
<tr>
<td valign="top">f7, f8,</td>
<td valign="top"><em>- HTML Fragment mit Trade-Link -</em></td>
</tr>
<tr>
<td valign="top">g, g0</td>
<td valign="top">Day&#8217;s Low</td>
</tr>
<tr>
<td valign="top">g1</td>
<td valign="top">Holdings Gain Percent</td>
</tr>
<tr>
<td valign="top">g3</td>
<td valign="top">Annualized Gain</td>
</tr>
<tr>
<td valign="top">g4, g6</td>
<td valign="top">Holdings Gain</td>
</tr>
<tr>
<td valign="top">g5</td>
<td valign="top">Holdings Gain Percent</td>
</tr>
<tr>
<td valign="top">h, h0</td>
<td valign="top">Day&#8217;s High</td>
</tr>
<tr>
<td valign="top">h1, h2, h3, h4, h5, h6</td>
<td valign="top"><em>- HTML Fragment -</em></td>
</tr>
<tr>
<td valign="top">i, i0</td>
<td valign="top">More Info</td>
</tr>
<tr>
<td>i2</td>
<td>- unknown -</td>
</tr>
<tr>
<td>i3</td>
<td>- unknown -</td>
</tr>
<tr>
<td>i4</td>
<td>- unknown -</td>
</tr>
<tr>
<td valign="top">i5</td>
<td valign="top">Order Book</td>
</tr>
<tr>
<td>i6</td>
<td>- unknown -</td>
</tr>
<tr>
<td valign="top">i7, l1, l7, l9, q2, v2, y2</td>
<td valign="top">Last Trade (price only)</td>
</tr>
<tr>
<td valign="top">j, j0</td>
<td valign="top">52-week Low</td>
</tr>
<tr>
<td valign="top">j1</td>
<td valign="top">Market Capitalization</td>
</tr>
<tr>
<td valign="top">j2</td>
<td valign="top">Shares Outstanding</p>
<p><strong>Achtung:</strong> hier wird der Wert unter Umst&#228;nden in Zahlengruppen, getrennt durch ein Komma zur&#252;ckgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.</td>
</tr>
<tr>
<td valign="top">j3</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">j4</td>
<td valign="top">EBITDA</td>
</tr>
<tr>
<td valign="top">j5</td>
<td valign="top">Change From 52-week Low</td>
</tr>
<tr>
<td valign="top">j6</td>
<td valign="top">Percent Change From 52-week Low</td>
</tr>
<tr>
<td valign="top">k, k0</td>
<td valign="top">52-week High</td>
</tr>
<tr>
<td valign="top">k1</td>
<td valign="top">Last Trade (with -unknown-)</td>
</tr>
<tr>
<td valign="top">k2</td>
<td valign="top">Change Percent (with -unknown-)</td>
</tr>
<tr>
<td valign="top">k3</td>
<td valign="top">Last Trade Size</p>
<p><strong>Achtung:</strong> hier wird der Wert unter Umst&#228;nden in Zahlengruppen, getrennt durch ein Komma zur&#252;ckgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.</td>
</tr>
<tr>
<td valign="top">k4</td>
<td valign="top">Change From 52-week High</td>
</tr>
<tr>
<td valign="top">k5</td>
<td valign="top">Percebt Change From 52-week High</td>
</tr>
<tr>
<td valign="top">l, l0, n1, n5, y1</td>
<td valign="top">Last Trade (with Date)</td>
</tr>
<tr>
<td valign="top">l2</td>
<td valign="top">High Limit</td>
</tr>
<tr>
<td valign="top">l3</td>
<td valign="top">Low Limit</td>
</tr>
<tr>
<td valign="top">l4</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">l5</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">l6</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">m, m0</td>
<td valign="top">Day&#8217;s Range</td>
</tr>
<tr>
<td valign="top">m1</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">m2</td>
<td valign="top">- unknown &#8211; (Day?) Range</td>
</tr>
<tr>
<td valign="top">m3</td>
<td valign="top">50-day Moving Average</td>
</tr>
<tr>
<td valign="top">m4</td>
<td valign="top">200-day Moving Average</td>
</tr>
<tr>
<td valign="top">m5</td>
<td valign="top">Change From 200-day Moving Average</td>
</tr>
<tr>
<td valign="top">m6</td>
<td valign="top">Percent Change From 200-day Moving Average</td>
</tr>
<tr>
<td valign="top">m7</td>
<td valign="top">Change From 50-day Moving Average</td>
</tr>
<tr>
<td valign="top">m8</td>
<td valign="top">Percent Change From 50-day Moving Average</td>
</tr>
<tr>
<td valign="top">n, n0</td>
<td valign="top">Name</td>
</tr>
<tr>
<td valign="top">n2</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">n3</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">n4</td>
<td valign="top">Notes</td>
</tr>
<tr>
<td valign="top">n6</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">n7</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">n8</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">n9</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">o, o0</td>
<td valign="top">Open</td>
</tr>
<tr>
<td valign="top">o1, o2</td>
<td valign="top">Open Interest bei Optionsscheinen</td>
</tr>
<tr>
<td valign="top">o4</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">o5</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">p, p0, p8</td>
<td valign="top">Previous Close</td>
</tr>
<tr>
<td valign="top">p1</td>
<td valign="top">Price Paid</td>
</tr>
<tr>
<td valign="top">p2,  p4</td>
<td valign="top">Change in Percent</td>
</tr>
<tr>
<td valign="top">p3</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">p5, p9</td>
<td valign="top">Price/Sales</td>
</tr>
<tr>
<td valign="top">p6</td>
<td valign="top">Price/Book</td>
</tr>
<tr>
<td valign="top">q, q0</td>
<td valign="top">Ex-Dividend Date</td>
</tr>
<tr>
<td valign="top">q3</td>
<td valign="top"><em>- HTML Fragment f&#252;r Zeitraumauswahl -</em></td>
</tr>
<tr>
<td valign="top">q4</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl des Grafentyps -</em></td>
</tr>
<tr>
<td valign="top">q5</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl der Skalierung -</em></td>
</tr>
<tr>
<td valign="top">q6</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl der Chart-Gr&#246;&#223;e -</em></td>
</tr>
<tr>
<td valign="top">q7</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl des Moving Avg. -</em></td>
</tr>
<tr>
<td valign="top">q8</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl des EMA -</em></td>
</tr>
<tr>
<td valign="top">q9</td>
<td valign="top"><em>- HTML Fragment f&#252;r Vergleichs-Formular -</em></td>
</tr>
<tr>
<td valign="top">r, r0</td>
<td valign="top">P/E Ratio</td>
</tr>
<tr>
<td valign="top">r1</td>
<td valign="top">Dividend Pay Date</td>
</tr>
<tr>
<td valign="top">r2</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">r3</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl der Indikatoren -</em></td>
</tr>
<tr>
<td valign="top">r4</td>
<td valign="top"><em>- HTML Fragment f&#252;r Auswahl der Overlays -</em></td>
</tr>
<tr>
<td valign="top">r5</td>
<td valign="top">PEG Ratio</td>
</tr>
<tr>
<td valign="top">r6</td>
<td valign="top">Price/EPS Estimate Current Year</td>
</tr>
<tr>
<td valign="top">r7</td>
<td valign="top">Price/EPS Estimate Next Year</td>
</tr>
<tr>
<td valign="top">r9</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">s, s0, s2, s4</td>
<td valign="top">Symbol</td>
</tr>
<tr>
<td valign="top">s1</td>
<td valign="top">Shares Owned</td>
</tr>
<tr>
<td valign="top">s3</td>
<td valign="top">Bezugspreis bei Optionsscheinen</td>
</tr>
<tr>
<td valign="top">s6</td>
<td valign="top">Revenue ?</td>
</tr>
<tr>
<td valign="top">s7</td>
<td valign="top">Short Ratio</td>
</tr>
<tr>
<td valign="top">t, t0, t2, u, u0, u2, u3</td>
<td valign="top"><em>- HTML Fragment f&#252;r ein Chart-Bild -</em></td>
</tr>
<tr>
<td valign="top">t1</td>
<td valign="top">Last Trade Time</td>
</tr>
<tr>
<td valign="top">t3</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">t4</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">t5</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">t6</td>
<td valign="top"><em>- HTML Fragment mit Trade-Link -</em></td>
</tr>
<tr>
<td valign="top">t7</td>
<td valign="top">Ticker Trend</td>
</tr>
<tr>
<td valign="top">t8</td>
<td valign="top">1 yr Target Price</td>
</tr>
<tr>
<td valign="top">v, v0, v6</td>
<td valign="top">Volume</td>
</tr>
<tr>
<td valign="top">v3</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">v4</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">v5</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">v1</td>
<td valign="top">Holdings Value</td>
</tr>
<tr>
<td valign="top">v7</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">w, w0</td>
<td valign="top">52-week Range</td>
</tr>
<tr>
<td valign="top">w1</td>
<td valign="top">Day&#8217;s Value Change</td>
</tr>
<tr>
<td valign="top">w4</td>
<td valign="top">- unknown -</td>
</tr>
<tr>
<td valign="top">x, x0</td>
<td valign="top">Stock Exchange</td>
</tr>
<tr>
<td valign="top">y, y0</td>
<td valign="top">Dividend Yield</td>
</tr>
<tr>
<td valign="top">z2</td>
<td valign="top"><em>- HTML Fragment -</em></td>
</tr>
<tr>
<td valign="top">z3</td>
<td valign="top"><em>- liefert &#8220;Oops!&#8221; -</em></td>
</tr>
</tbody>
</table>
<p>H&#246;here Indexwerte f&#252;hren nur noch zu einer Wiederholung der Inhalte. Vermutlich sollen die Codes zweistellig sein (Buchstabe + Zahl). F&#228;llt die Zahl weg, so wir automatisch der Index 0 angenommen.</p>
<h2>Daytrading-Daten</h2>
<p>Leider bietet Yahoo!Finance nur die letzten 100 Tages-Kurswerte zum Ermittlungszeitpunkt an. Auch hier wirkt die Verz&#246;gerung von 15-60 Minuten, wie im Abschnitt &#8220;Aktuelle Kursdaten&#8221; beschrieben.  Die Serviceadresse f&#252;r die Daytrading-Daten lautet <code>http://logtrade.finance.vip.ukl.yahoo.com/lastTrades?</code> und nimmt folgende drei bekannte Parameter entgegen:</p>
<table class="full" border="0">
<tbody>
<tr>
<th>Parameter</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>s=</td>
<td>Das <strong>Symbol</strong> des Wertpapiers wird mit dem Parameter &#8220;s&#8221; angegeben. Z.B. liefert hier &#8220;<code>s=AAPL</code>&#8221; die letzten 100 Daytrading-Daten von Apple Inc.</td>
</tr>
<tr>
<td>output=user</td>
<td>Der Sinn dieses Parameters ist leider noch nicht bekannt. F&#252;r weitere Hinweise bin ich sehr dankbar.</td>
</tr>
<tr>
<td>i=eu</td>
<td>Auch hier ist mir der Sinn des Parameters noch nicht bekannt.</td>
</tr>
</tbody>
</table>
<p>Das Ergebnis einer solchen Abfrage liefert eine Liste mit Wertegruppen &#8211; eine Gruppe f&#252;r jeden Trade. Ein solches Tupel enth&#228;lt den Trading-Zeitpunkt, den Kurswert und die Volumina des Trades.</p>
<h2>Historische Kursdaten</h2>
<p>F&#252;r ein Wertpapier stehen bei Yahoo ebenfalls historische Daten zur Verf&#252;gung. Die Service-URL hierf&#252;r lautet <code>http://ichart.finance.yahoo.com/table.csv?</code> und besitzt Parameter f&#252;r das Symbol, sowie f&#252;r das Zeitintervall, innerhalb ein Entwickler die t&#228;glichen bzw. w&#246;chentlichen Kursdaten ermitteln will:</p>
<table class="full" border="0">
<tbody>
<tr>
<th>Parameter</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>a=</td>
<td>Start-Monat -1 (Januar ist hier der Wert &#8220;0&#8243;)</td>
</tr>
<tr>
<td>b=</td>
<td>Start-Tag</td>
</tr>
<tr>
<td>c=</td>
<td>Start-Jahr</td>
</tr>
<tr>
<td>d=</td>
<td>End-Monat -1 (Januar ist hier der Wert &#8220;0&#8243;)</td>
</tr>
<tr>
<td>e=</td>
<td>End-Tag</td>
</tr>
<tr>
<td>f =</td>
<td>End-Jahr</td>
</tr>
<tr>
<td>g=</td>
<td>Chart-Abstufung (d=t&#228;gliche Werte, w=w&#246;chentliche Werte, m=monatliche Werte, v=Dividendenaussch&#252;ttungen)</td>
</tr>
<tr>
<td>s=</td>
<td>Symbol des Aktienkurses</td>
</tr>
<tr>
<td>ignore=.cvs</td>
<td>(konstanter Wert, aber optional)</td>
</tr>
<tr>
<td valign="top">y=</td>
<td valign="top">Verschiebung um eine angegebene Anzahl an Tagen/Wochen/Monaten. Macht eigentlich keinen Sinn, da oben bereits ein Intervall angegeben wurde. Trotzdem unterscheiden sich z.B. die Volumen-Werte eines Monats (g=m), wenn hier eine Verschiebung Y&gt;0 angegeben wird. F&#252;r weitere Hinweise bin ich hier dankbar!</td>
</tr>
</tbody>
</table>
<p>Das Ergebnis besteht aus einer Liste t&#228;glicher, w&#246;chentlicher oder monatlicher Werte zu dem &#252;bermittelten Zeitraum. Die erste Zeile enth&#228;lt die &#220;berschrift der einzelnen Spaltenwerte. In allen weiteren Zeilen liefert Yahoo!Finance danach das Datum, den Er&#246;ffnungskurs, den h&#246;chsten und tiefsten Kurswert, sowie den Tagesschlusskurs und das Handelsvolumen f&#252;r jeden einzelnen Tag. Da diese Werte gegen&#252;ber Splits und Dividenden unbereinigt sind, liefert Yahoo! in der letzten Spalte &#8220;Adj. Close&#8221; noch bereinigte Schlusskurse. Ein bisschen anders sieht das Ergebnis aus, wenn als Chart-Abstufung der Wert &#8220;v&#8221; f&#252;r die Dividendenaussch&#252;ttungen angegeben wird. Dann werden nur noch zwei Spalten mit einem Datum sowie dem Wert selbst zur&#252;ckgeliefert. Hier noch zwei Beispiele mit den ersten paar Zeilen der Ergebnisse:</p>
<pre>http://ichart.finance.yahoo.com/table.csv?s=AAPL&amp;d=3&amp;e=3&amp;f=2008&amp;g=d&amp;a=8&amp;b=7&amp;c=1984&amp;ignore=.cvs
---
Date,Open,High,Low,Close,Volume,Adj Close
2008-04-02,148.78,151.20,145.85,147.49,37253700,147.49
2008-04-01,146.30,149.66,143.61,149.53,36846400,149.53
2008-03-31,143.27,145.71,142.52,143.50,27418300,143.50
2008-03-28,141.80,144.65,141.60,143.01,25521800,143.01
...</pre>
<pre>http://itable.finance.yahoo.com/table.csv?s=AAPL&amp;d=3&amp;e=3&amp;f=2008&amp;g=v&amp;a=8&amp;b=7&amp;c=1984&amp;ignore=.cvs
---
Date,Dividends
1995-11-21,0.030000
1995-08-16,0.030000
1995-05-26,0.030000
...</pre>
<p>F&#252;r die programmatische Auswertung dieser Daten bietet sich auch hier das Array als Ergebnistr&#228;ger an. In jeder Zeile k&#246;nnen so die Werte eines Tages (bzw. einer Woche, eines Monats oder der Dividenden) abgelegt werden. Folgende PHP-Funktion soll dies verdeutlichen:</p>
<pre>&lt;?php
    /*
     * Getting historical quotes in a given time period
     * Parameters:
     * $symbol:                             symbol
     * $startDay, $startMonth, $startYear:  the first day for the historical quotes
     * $endDay, $endMonth, $endYear:        the last day for the historical quotes
     * $step  (d/w/m/v):                    d=daily, w=weekly, m=monthly, v=dividends
     *
     * (c) Matthias Brusdeylins, 2008
     * License: CC-GNU GPL (http://creativecommons.org/licenses/GPL/2.0/)
     */
    define ("HISTORY_QUOTES_URL", "http://ichart.yahoo.com/table.csv?");
    function loadHistoricalYahooQuotes ($symbol,
                                        $startDay,
                                        $startMonth,
                                        $startYear,
                                        $endDay,
                                        $endMonth,
                                        $endYear,
                                        $step)
    {
        $lineCount = 0;
        $days = array();

        // modify parameters
        $sM=$startMonth-1;
        $eM=$endMonth-1;

        // load the historical stock quotes: we are opening it for reading
        // http://ichart.yahoo.com/table.csv?s=  SYMBOL.COUNTRY  &amp;a,b,c START $d,e,f ENDE $g d=daily/w=weekly/m=monthly/v=dividends
        $URL = HISTORY_QUOTES_URL."s=$symbol&amp;a=$sM&amp;b=$startDay&amp;c=$startYear&amp;d=$eM&amp;e=$endDay&amp;f=$endYear&amp;g=$step&amp;y=0&amp;ignore=.cvs";
        $fileHandle = fopen ($URL,"r");

        if ($fileHandle) {
            // use the fgetcsv function to store quote values into a array $lineValues
            // store one symbol in one line
            do {
                $stockValues = fgetcsv ($fileHandle, 999999, ",");
                if ($stockValues) {
                    $lineCount++;
                    $days[$lineCount] = $stockValues;
                }
            } while ($stockValues);

            // close handle
            fclose ($fileHandle);
        } else {
            $days[0][0] = "ERROR";
            $days[0][1] = "No data found.";
        }        

        return $days;
    }
?&gt;</pre>
<h2>L&#228;nderunterschiede</h2>
<p>An der B&#246;rse werden nicht nur Aktien in unterschiedlichen W&#228;hrungen gehandelt, sondern auch Nebenwerte wie beispielsweise Optionsscheine. Der Handel solcher Wertpapiere ist meist auf ein Land bzw. B&#246;rsenplatz beschr&#228;nkt. Aus diesem Grund bietet Yashoo!Finance auch unterschiedliche Serviceadressen an. In diesem Artikel wurden bisher nur die Adressen f&#252;r US-B&#246;rsendaten aufgezeigt. So kann unter der URL <code>http://finance.yahoo.com/d/quotes.csv?</code> der aktuelle Kurs einer Aktie in US-Dollars ermittelt werden. Wollen Sie hingegen einen Kurs aus dem deutschen Raum ermitteln, steht Ihnen die URL <code>http://<strong>de</strong>.finance.yahoo.com/d/quotes.csv?</code> zur Verf&#252;gung.</p>
<p>Die folgende Tabelle zeigt die Adressen (URL) zum Yahoo!Finance-Service f&#252;r aktuelle B&#246;rsenkurse. In der ersten Spalte werden auch die Symbol-Suffixe aufgelistet, welche f&#252;r eine aktive B&#246;rsenplatz-Wahl an die Symbolangabe geh&#228;ngt werden k&#246;nnen (z.B. &#8220;<code>AAPL.DE</code>&#8221; f&#252;r den XETRA-Kurs des Apple-Aktie). Ein Besuch auf die Webseite von Yahoo! Finance hilft hier bei der Auswahl der richtigen Symbolbezeichnung.</p>
<table class="full" border="0">
<tbody>
<tr>
<th>Land &amp; Suffix</th>
<th>URLs</th>
</tr>
<tr>
<td class="left">Argentinien</p>
<p>.BA (Buenos Aires)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://ar.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Australien</p>
<p>.AX (Australia)</td>
<td><code>http://au.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Belgien</p>
<p>.BR (Brussels)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Brasilien</p>
<p>.SA (São Paulo)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p></code><code>http://br.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>D&#228;nemark</p>
<p>.CO (Copenhagen)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://dk.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Deutschland</p>
<p>.BE (Berlin-Bremen)</p>
<p>.DU (D&#252;sseldorf)</p>
<p>.F (Frankfurt)</p>
<p>.HM (Hamburg)</p>
<p>.HA (Hanover)</p>
<p>.MU (M&#252;nchen)</p>
<p>.SG (Stuttgart)</p>
<p>.DE (XETRA)</td>
<td><code>http://de.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>China</p>
<p>.SS (Shanghai)</p>
<p>.SZ (Shenzhen)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://cn.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>England</p>
<p>.L (London)</td>
<td><code>http://uk.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Frankreich</p>
<p>.PA (Paris)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://fr.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Hong Kong</p>
<p>.HK (Hong Kong)</td>
<td><code>http://hk.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Indien</p>
<p>.BO (Bombay)</p>
<p>.NS (Nationale B&#246;rse Indien)</td>
<td><code>http://in.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Indonesien</p>
<p>.JK (Jakarta)</td>
<td><code>http://sg.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Irland</p>
<p>.IR (Irish)</td>
<td><code>http://uk.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Israel</p>
<p>.TA (Tel Aviv)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Italien</p>
<p>.MI (Milano)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://it.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td class="left">Kanada</p>
<p>.TO (Toronto)</p>
<p>.V (TSX Venture Exchange)</td>
<td><code>http://ca.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Korea (S&#252;d)</p>
<p>.KS (Korea)</p>
<p>.KQ (KOSDAQ)</td>
<td><code>http://kr.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td class="left">Malaysien</p>
<p>.KL (Kuala Lumpur) ?</td>
<td><code>http://sg.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Mexico</p>
<p>.MX (Mexico)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Neu Seeland</p>
<p>.NZ (New Zealand)</td>
<td><code>http://au.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Niederlande</p>
<p>.AS (Amsterdam)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Norwegen</p>
<p>.OL (Oslo)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://no.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>&#214;sterreich</p>
<p>.VI (Vienna)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Pakistan</p>
<p>.KA (Karachi) ?</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Portugal</p>
<p>.LS (Lissabon)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Schweden</p>
<p>.ST (Stockholm)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p>http://se.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Schweiz</p>
<p>.SW (Swiss)</p>
<p>.VX (Virt-X)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Singapore</p>
<p>.SI (Singapore)</td>
<td><code>http://sg.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td class="left">Spanien</p>
<p>.BC (Barcelona)</p>
<p>.BI (Bilbao)</p>
<p>.MF (Madrid Fixed Income Market)</p>
<p>.MC (Madrid SE C.A.T.S.)</p>
<p>.MA (Madrid)</td>
<td><code>http://es.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Taiwan</p>
<p>.TWO (OTC B&#246;rse Taiwan)</p>
<p>.TW (Taiwan)</td>
<td><code>http://sg.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td>Thailand</p>
<p>.BK (Bangkok)</td>
<td><code>http://sg.finance.yahoo.com/d/quotes.csv?</code></td>
</tr>
<tr>
<td class="left">USA</p>
<p>kein Suffix f&#252;r AMEX, NASDAQ und NYSE</p>
<p>.OB (OTC Bulletin Board Market)</p>
<p>.PK (Pink Sheets)</td>
<td><code>http://finance.yahoo.com/d/quotes.csv?</p>
<p></code></td>
</tr>
</tbody>
</table>
<h2>Download</h2>
<p>Die Klasse <code>Finance_API_Yahoo</code> bietet einen einfachen Zugriff auf die hier beschriebene Schnittstelle. Mit ihr lassen sich aktuelle, sowie historische Kursdaten ermitteln. Das Ergebnis wird in einem zweidimensionalen Array zur&#252;ckgeliefert (siehe Beispiele im Text). F&#252;r die Package-Struktur diente das <a href="http://framework.zend.com/" target="_blank">Zend-Framework</a> als Vorlage. Somit ist eine einfache Integration in dieses gew&#228;hrleistet.</p>
<p><a href="http://www.brusdeylins.info/content/projects/yahoo/YahooFinanceAPI_1.0.zip" target="_blank">Yahoo! Finance API, Version 1.0</a></p>
<h3>Change-Log</h3>
<table class="changelog" border="0">
<tbody>
<tr>
<td class="left">0.5</td>
<td>31.03.2008 &#8211; First release</td>
</tr>
<tr>
<td class="left">0.6</td>
<td>06.04.2008 &#8211; Function code list completed</td>
</tr>
<tr>
<td valign="top">1.0</td>
<td valign="top">04.05.2008 &#8211; Zend-Framework package structure integrated</td>
</tr>
</tbody>
</table>
<p><a href="http://creativecommons.org/licenses/GPL/2.0/deed.de" target="_blank"></p>
<p><img src="http://creativecommons.org/images/public/cc-GPL-a.png" border="0" alt="CC-GNU GPL" /></a></p>
<p>Diese Software und die hier gezeigten Codest&#252;cke fallen unter den Lizenzvertrag <a href="http://creativecommons.org/licenses/GPL/2.0/deed.de" target="_blank">CC-GNU GPL</a>.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/projects/yahoo-finance-api/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Easy-HTML-Metadata</title>
		<link>http://brusdeylins.info/projects/easy-html-metadata/</link>
		<comments>http://brusdeylins.info/projects/easy-html-metadata/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 13:10:25 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekt]]></category>

		<guid isPermaLink="false">http://www.brusdeylins.info/blog/2007/09/08/easy-html-metadata/</guid>
		<description><![CDATA[
Damit solche Metadaten f&#252;r einzelne WordPress-Beitr&#228;ge individuell angegeben werden k&#246;nnen, wird ein sogenanntes WordPress-Plugin ben&#246;tigt. Ich will hier meine kleine Erweiterung "Easy-HTML-Metadata" vorstellen. Sie reagiert auf zuvor definierte "Benutzerdefinierte Felder" eines Beitrags bzw. einer Seite und gibt dessen Inhalte als Metadaten aus.
Installation
Nach dem Herunterladen der aktuellsten Version dieses Plugins (siehe unten) muss die PHP-Datei aus [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->
<a href="http://brusdeylins.info/media/post-images/easy-html-metadata.jpg" title="Easy-HTML-Metadata - Bildquelle: Brusdeylins.Info" rel="lightbox[singlepic14]" >
	<img class="ngg-singlepic ngg-right" src="http://brusdeylins.info/media/cache/14_web20_150x400_easy-html-metadata.jpg" alt="Easy-HTML-Metadata" title="Easy-HTML-Metadata" />
</a>
HTML-Meta-Angaben in der Form <code>&lt;meta name="key" content="value"&gt;</code> enthalten verschiedene, meist dem Leser verborgene Anweisungen f&#252;r Web-Browser und -Server sowie Suchdienste. Leider wurden Metadaten immer wieder missbraucht, um die Suchmaschinen auszutricksen, indem hier Stichw&#246;rter aufgelistet wurden, die mit dem Inhalt nichts  zu tun hatten. Man erhoffte sich so eine bessere Positionierung in der Treffermenge der Suchmaschinen. Aus diesem Grund werden diese Metadaten von namenhaften Suchdiensten nur noch schwach bewertet. Statt dessen wird nun der Inhalt analysiert als auch die Anzahl der Referenzen <em>von </em>externen Internetseiten. Trotzdem geh&#246;rt zu einer gut gestalteten Webseite auch der sinnvolle Einsatz von Meta-Angaben zum Inhalt der aktuell angezeigten Seite, sowie die Angabe des Autors.<!--:--><span id="more-35"></span><!--:de--></p>
<p>Damit solche Metadaten f&#252;r einzelne WordPress-Beitr&#228;ge individuell angegeben werden k&#246;nnen, wird ein sogenanntes WordPress-Plugin ben&#246;tigt. Ich will hier meine kleine Erweiterung &#8220;Easy-HTML-Metadata&#8221; vorstellen. Sie reagiert auf zuvor definierte &#8220;Benutzerdefinierte Felder&#8221; eines Beitrags bzw. einer Seite und gibt dessen Inhalte als Metadaten aus.</p>
<h3>Installation</h3>
<p>Nach dem Herunterladen der aktuellsten Version dieses Plugins (siehe unten) muss die PHP-Datei aus dem Zip-File in das WordPress-Plugin-Verzeichnis (dies ist meist /wp-content/plugins/) kopiert werden. Hier kann man ggf. auch ein Unterverzeichnis anlegen, um so mehr &#220;berblick &#252;ber alle Plugins in seiner WordPress-Installation zu erlangen. Danach muss dieses Plugin in der Adminkonsole aktiviert werden.</p>
<h3>Einsatz</h3>
<p>Jetzt steht dem User unter den Einstellungen ein neuer Men&#252;punkt &#8220;HTML-Metadata&#8221; zur Verf&#252;gung, 
<a href="http://brusdeylins.info/media/post-images/easy-html-metadata-in-action.jpg" title="Easy-HTML-Metadata in Action - Bildquelle: Brusdeylins.Info" rel="lightbox[singlepic13]" >
	<img class="ngg-singlepic ngg-left" src="http://brusdeylins.info/media/cache/13_web20_150x400_easy-html-metadata-in-action.jpg" alt="Easy-HTML-Metadata in Action" title="Easy-HTML-Metadata in Action" />
</a>
 in dem die Standard-Sprache sowie die Namen der benutzerdefinierten Felder definiert werden k&#246;nnen (siehe Bild oben rechts). In der Regel bleiben die Feldnamen unver&#228;ndert. Nun kann man zu jedem Beitrag solche benutzerdefinierten Felder mit angeben. Als Schl&#252;ssel werden die zuvor definierten Namen eingesetzt, der Wert ist dann der Inhalt des zugeordneten Meta-Data-Elementes. Im Beispiel links sind die Meta-Angaben dieses Artikels (zum Zeitpunkt der Erstellung) sichtbar. Das Ergebnis der Version 1.2 im HTML-Kopf dieser hier sichtbaren Seite sieht dazu folgenderma&#223;en aus:</p>
<pre>&lt;meta name="MBEasyHTMLMetadata" content="1.0" /&gt;
&lt;meta name="language" content="de" /&gt;
&lt;meta name="content-language" content="de" /&gt;
&lt;meta name="description" content="Wordpress-Plugin f&#252;r inhaltliche HTML-Metaangaben." /&gt;
&lt;meta name="keywords" content="Wordpress, Plugin, Metadata, Metadaten, Description, Beschreibung, Keywords, Schl&#252;sselw&#246;rter" /&gt;
&lt;meta name="author" content="Matthias Brusdeylins" /&gt;
&lt;meta name="copyright" content="Copyright by Matthias Brusdeylins. Creative Commons 3.0 license - Some rights reserved." /&gt;</pre>
<p>Hier ist auch erkennbar, dass automatisch der volle Name des registrierten Autors mit ausgegeben wird. Das Plugin ben&#246;tigt keine &#196;nderungen an dem installierten WordPress-Theme.</p>
<h3>Download</h3>
<p><a href="http://www.brusdeylins.info/content/projects/ehmd/Easy_HTML_Metadata_1_2.zip" target="_blank">Easy-HTML-Metadata, Version 1.2</a></p>
<h3>Change-Log</h3>
<table class="changelog" border="0">
<tbody>
<tr>
<td class="left">1.2</td>
<td>08.09.2007 &#8211; Copyright information (if full name is defined) and Creative Commons 3.0 license added to the metadata</td>
</tr>
<tr>
<td class="left">1.1</td>
<td>02.09.2007 &#8211; Copyright information added to the admin dialog</td>
</tr>
<tr>
<td class="left">1.0</td>
<td>24.08.2007 &#8211; First release</td>
</tr>
<tr>
<td class="left"></td>
<td></td>
</tr>
</tbody>
</table>
<p><a href="http://creativecommons.org/licenses/GPL/2.0/deed.de" target="_blank"><br />
<img src="http://creativecommons.org/images/public/cc-GPL-a.png" border="0" alt="CC-GNU GPL" /></a><br />
Diese Software f&#228;llt unter den Lizenzvertrag <a href="http://www.brusdeylins.info/license/GPL-License.txt" target="_blank">CC-GNU GPL</a>.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/projects/easy-html-metadata/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
