Explore MIT App Inventor - External API http://dev-explore.appinventor.mit.edu/tutorial-type/external-api en StockQuotes for App Inventor 2 http://dev-explore.appinventor.mit.edu/ai2/stockquotes <div class="field field-name-body field-type-text-with-summary field-label-hidden view-mode-rss"><div class="field-items"><div class="field-item even" property="content:encoded"><style> <!--/*--><![CDATA[/* ><!--*/ li { padding-bottom: 7px; } .basicblock { border: 1px dashed #7AA81C; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E7F2CB; font-size: 9pt; text-wrap: suppress; } .callblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E0D1FF; font-size: 9pt; text-wrap: suppress; } .argblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E5E5FF; font-size: 9pt; text-wrap: suppress; } .textblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FADAA0; font-size: 9pt; text-wrap: suppress; } .setblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C1D5F8; font-size: 9pt; text-wrap: suppress; } .controlblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FAEDBB; font-size: 9pt; text-wrap: suppress; } /*--><!]]>*/ </style><h2 class="ai-header"><span style="color:green;">StockQuotes</span></h2> <h4 class="ai-header">What You're Building</h4> <p>Just like you can access web pages from your phone -- for example, to look up a stock price -- so can App Inventor. This app enables the user to enter a stock symbol, then looks up the price of the stock on Yahoo! Finance and displays the price on the phone.</p> <p>This tutorial assumes that you are familiar with the basics of App Inventor -- using the Component Designer to build a user interface and using the Blocks Editor to specify event handlers. If you are not familiar with the basics, try stepping through some of the <a href="http://explore.appinventor.mit.edu/content/tutorials">basic tutorials</a> before continuing.</p> <h4 class="ai-header">Introduction</h4> <p>This tutorial includes</p> <ol><li>Accepting text input from the user to specify the stock symbol.</li> <li>Using the Web component to ask Google Finance for the latest price for the stock.</li> <li>Displaying the result.</li> </ol><h4 class="ai-header">Getting Started</h4> <p>Connect to the App Inventor web site and start a new project. Name it StockQuotes, and also set the screen’s <b style="color:green;">Title</b> to “Stock Quotes”. Open the Blocks Editor and connect it to the phone.</p> <h4 class="ai-header">Set up the Components</h4> <p>Use the component designer to create the user interface. When you are done, it should look something like the picture below. Additional instructions are below the picture.</p> <p><img src="/sites/all/files/ai2tutorials/stockQuotes/components1.png" /></p> <p>Create the following components by dragging them from the Palette into the Viewer.</p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Component Type </td> <td> Palette Group </td> <td> What you'll name it </td> <td> Purpose of Component </td> </tr><tr><td> <b>TextBox</b> </td> <td>Basic</td> <td style="color:green;">StockSymbolTextBox</td> <td>Where the user enters the stock symbol</td> </tr><tr><td> <b>Button</b> </td> <td>Basic</td> <td style="color:green;">GetQuoteButton</td> <td>To request the stock quote</td> </tr><tr><td> <b>Label</b> </td> <td>Basic</td> <td style="color:green;">ValueLabel</td> <td>To display the stock quote</td> </tr><tr><td> <b>Web</b> </td> <td>Other stuff</td> <td style="color:green;">Web1</td> <td>To request and receive the stock quote</td> </tr></table><p>Stick with the default properties except for the following changes:</p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td>Component</td> <td>Action</td> </tr><tr><td><b>StockSymbolTextBox</b></td> <td>Set its <b style="color:green;">Hint</b> property to "Enter a stock symbol". Clear its <b style="color:green;">Text</b> property by deleting or backspacing over the contents.</td> </tr><tr><td><b>GetQuoteButton</b></td> <td>Set its <b style="color:green;">Text</b> property to "Get Stock Quote".</td> </tr><tr><td><b>ValueLabel</b></td> <td>Clear its <b style="color:green;">Text</b> property.</td> </tr></table><h4 class="ai-header">The Yahoo! Finance API</h4> <p>Many web services provide an <em>application programmer interface</em> (API) for developers to enable their programs to access the service. Some ways to discover APIs are through the website <a href="http://programmableweb.com">http://programmableweb.com</a> or just by doing a web search for the service name and “API”.</p> <p>The Yahoo! Finance API is documented in gory detail at <a href="http://www.gummy-stuff.org/Yahoo-data.htm">http://www.gummy-stuff.org/Yahoo-data.htm</a> . The highlights are that you can get the latest price for the stock with the symbol "GOOG", for example, with the URL <a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=GOOG">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=GOOG</a> . The section "f=l1" (lower-case letter L, followed by the number 1) says we would like the latest price, and the section “s=GOOG” says we would like information about the stock whose symbol is “GOOG”. The result is returned in comma-separated value (CSV) format, which you may be familiar with from spreadsheets. Since only one value will be returned for our query, the result will be a plain old number, such as “511.5”, without any commas. (Commas would be used if we requested multiple pieces of data from Yahoo!, such as the name of the company and the daily trade volume.)</p> <h4 class="ai-header">Add Behaviors to the Components</h4> <h5 class="ai-header">Requesting the Data</h5> <p>The blocks to make the web request are shown here and detailed below:</p> <p><img src="/sites/all/files/ai2tutorials/stockQuotes/request-data.png" /></p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Block type </td> <td> Drawer </td> <td> Purpose </td> </tr><tr><td><span class="eventblock">GetQuoteButton.Click</span></td> <td>GetQuoteButton</td> <td>Handle a click of the "Get Quote" button.</td> </tr><tr><td><span class="componentsetblock">set Web1.Url to</span></td> <td>Web1</td> <td>Specify the URL to request.</td> </tr><tr><td><span class="textblock-ai2">call make text</span></td> <td>Text</td> <td>Concatenate the parts of the URL.</td> </tr><tr><td><span class="textblock-ai2">text</span> (<a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=</a>)</td> <td>Text</td> <td>Specify the first unchanging part of the URL.</td> </tr><tr><td><span class="componentsetblock">StockSymbolTextBox.Text</span></td> <td>StockSymbolTextBox</td> <td>Get the stock symbol from the text box.</td> </tr><tr><td><span class="eventblock">call Web1.Get</span></td> <td>Web1</td> <td>Make the web request.</td> </tr></table><p>The meaning is: When GetQuoteButton is clicked:</p> <ol><li>Build the Web component’s URL by concatenating “<a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=</a>” (which you should copy and paste into the text block) and the symbol entered by the user (StockSymbolTextBox.Text).</li> <li>Request the page specified by the URL. (This is like pressing return after entering a URL in your web browser.)</li> </ol><h5 class="ai-header">Receiving the Data </h5><p>When the response to the web request arrives, the <span class="eventblock">Web.GotText</span> event is raised with four parameters (only some of which we’ll use in this app):</p> <ol><li><b>url</b>: the URL of the original request (which is useful if requests are made with many different URLs).</li> <li><b>responseCode</b>: <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">the HTTP status code</a>, which indicates whether the web request succeeded or how it failed; for example, 200 means that the request succeeded, 404 that the page could not be found, etc.</li> <li><b>responseType</b>: <a href="http://en.wikipedia.org/wiki/Mime_type">the MIME type</a> of the response, such as “text/csv” in this app, “image/jpeg”, etc.</li> <li><b>responseContent</b>: the data being returned, such as “511.5”.</li> </ol><p>Here are a picture and table of the blocks you need to create:</p> <p><img src="/sites/all/files/ai2tutorials/stockQuotes/receive-data.png" /></p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Block type </td> <td> Drawer </td> <td> Purpose </td> </tr><tr><td><span class="eventblock">Web1.GotText</span></td> <td>Web1</td> <td>Specify what to do when the reply comes back from the web.</td> </tr><tr><td><span class="controlblock-ai2">ifelse</span></td> <td>Control</td> <td>Provide different behavior depending on whether the request succeeded.</td> </tr><tr><td><span class="variableblock">get responseCode</span></td> <td>Variables</td> <td>Gets the response code returned for the web request, which...</td> </tr><tr><td><span class="mathblock-ai2"> = </span>(equals) block</td> <td>Math</td> <td>...is checked for equality with...</td> </tr><tr><td><span class="eventblock">number</span> (200)</td> <td>Math</td> <td>...200, the code for valid web responses.</td> </tr><tr><td><span class="componentsetblock">set ValueLabel.Text to</span></td> <td>ValueLabel</td> <td>Display the result on the screen.</td> </tr><tr><td><span class="textblock-ai2">call make text</span></td> <td>Text</td> <td>Build the result by concatenating...</td> </tr><tr><td><span class="textblock-ai2">text</span> ("Current value: ")</td> <td>Text</td> <td>...the text “Current value: “ and...</td> </tr><tr><td><span class="variableblock">get responseContent</span></td> <td>Variables</td> <td>Gets the value returned from the web.</td> </tr><tr><td><span class="componentsetblock">set ValueLabel.Text to</span></td> <td>ValueLabel</td> <td>Display an error message.</td> </tr><tr><td><span class="textblock-ai2">text</span> ("Error getting stock quote")</td> <td>Text</td> <td>The error message</td> </tr></table><p>Here's a description of the block's behavior:</p> <ol><li>If the response code indicates that the web request succeeded (= 200), set the label to the concatenation of “Current value: “ and the returned data (e.g., 511.5).</li> <li>Otherwise, set the label to “Error getting stock quote”.</li> </ol><h4 class="ai-header">Review</h4> <p>Here are some ideas introduced in this tutorial:</p> <ol><li>Using an application programmer interface (API)</li> <li>Making a request with the Web component</li> <li>Checking whether a web request was successful</li> <li>Displaying information returned from the web</li> </ol><p>These ideas will be developed further in the second part of this tutorial, which is under development.</p> <h4 class="ai-header">Scan the Sample App to your Phone</h4> <p>Scan the following barcode onto your phone to install and run the sample app. </p><p><img src="/sites/all/files/ai2tutorials/stockQuotes/StockQuotesBarcode.png" /></p> <h4 class="ai-header">Download Source Code</h4> <p>If you'd like to work with this sample in App Inventor, download the <a href="/sites/all/files/ai2tutorials/stockQuotes/stockQuotes.aia">source code</a> to your computer, then open App Inventor, go to the My Projects page, and choose <b>More Actions | Upload Source</b>.</p> <h4 class="ai-header">Credits</h4> <pre class="ai-box">This tutorial is based on <a href="http://appinventorblog.com/2011/06/02/app-inventor-has-a-new-component-the-web/">an app created by Prof. David Wolber</a> and relies on the Yahoo! Finance API. Done with <span style="color:black;">StockQuotes</span>? Return to the other tutorials <a href="http://explore.appinventor.mit.edu/ai2/tutorials">here</a>.</pre></div></div></div><section class="field field-name-field-version field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Version:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-version/app-inventor-2" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">App Inventor 2</a> </li> </ul> </section> <section class="field field-name-field-tutorial-difficulty field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Difficulty:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-difficulty/advanced" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Advanced</a> </li> </ul> </section> <section class="field field-name-field-tutorial-type field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Type:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-type/external-api" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">External API</a> </li> </ul> </section> Tue, 02 Jul 2013 20:35:01 +0000 aaron 354 at http://dev-explore.appinventor.mit.edu http://dev-explore.appinventor.mit.edu/ai2/stockquotes#comments StockQuotes http://dev-explore.appinventor.mit.edu/content/stockquotes <div class="field field-name-body field-type-text-with-summary field-label-hidden view-mode-rss"><div class="field-items"><div class="field-item even" property="content:encoded"><style> <!--/*--><![CDATA[/* ><!--*/ li { padding-bottom: 7px; } .basicblock { border: 1px dashed #7AA81C; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E7F2CB; font-size: 9pt; text-wrap: suppress; } .callblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E0D1FF; font-size: 9pt; text-wrap: suppress; } .argblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #E5E5FF; font-size: 9pt; text-wrap: suppress; } .textblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FADAA0; font-size: 9pt; text-wrap: suppress; } .setblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C1D5F8; font-size: 9pt; text-wrap: suppress; } .controlblock { border: 1px dashed #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FAEDBB; font-size: 9pt; text-wrap: suppress; } /*--><!]]>*/ </style><h2 class="ai-header"><span style="color:green;">StockQuotes</span></h2> <h4 class="ai-header">What You're Building</h4> <p>Just like you can access web pages from your phone -- for example, to look up a stock price -- so can App Inventor. This app enables the user to enter a stock symbol, then looks up the price of the stock on Yahoo! Finance and displays the price on the phone.</p> <p>This tutorial assumes that you are familiar with the basics of App Inventor -- using the Component Designer to build a user interface and using the Blocks Editor to specify event handlers. If you are not familiar with the basics, try stepping through some of the <a href="/tutorials">basic tutorials</a> before continuing.</p> <h4 class="ai-header">Introduction</h4> <p>This tutorial includes</p> <ol><li>Accepting text input from the user to specify the stock symbol.</li> <li>Using the Web component to ask Google Finance for the latest price for the stock.</li> <li>Displaying the result.</li> </ol><h4 class="ai-header">Getting Started</h4> <p>Connect to the App Inventor web site and start a new project. Name it StockQuotes, and also set the screen’s <b style="color:green;">Title</b> to “Stock Quotes”. Open the Blocks Editor and connect it to the phone.</p> <h4 class="ai-header">Set up the Components</h4> <p>Use the component designer to create the user interface. When you are done, it should look something like the picture below. Additional instructions are below the picture.</p> <p><img src="/sites/all/files/tutorials/stockQuotes/components1.png" /></p> <p>Create the following components by dragging them from the Palette into the Viewer.</p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Component Type </td> <td> Palette Group </td> <td> What you'll name it </td> <td> Purpose of Component </td> </tr><tr><td> <b>TextBox</b> </td> <td>Basic</td> <td style="color:green;">StockSymbolTextBox</td> <td>Where the user enters the stock symbol</td> </tr><tr><td> <b>Button</b> </td> <td>Basic</td> <td style="color:green;">GetQuoteButton</td> <td>To request the stock quote</td> </tr><tr><td> <b>Label</b> </td> <td>Basic</td> <td style="color:green;">ValueLabel</td> <td>To display the stock quote</td> </tr><tr><td> <b>Web</b> </td> <td>Other stuff</td> <td style="color:green;">Web1</td> <td>To request and receive the stock quote</td> </tr></table><p>Stick with the default properties except for the following changes:</p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td>Component</td> <td>Action</td> </tr><tr><td><b>StockSymbolTextBox</b></td> <td>Set its <b style="color:green;">Hint</b> property to "Enter a stock symbol". Clear its <b style="color:green;">Text</b> property by deleting or backspacing over the contents.</td> </tr><tr><td><b>GetQuoteButton</b></td> <td>Set its <b style="color:green;">Text</b> property to "Get Stock Quote".</td> </tr><tr><td><b>ValueLabel</b></td> <td>Clear its <b style="color:green;">Text</b> property.</td> </tr></table><h4 class="ai-header">The Yahoo! Finance API</h4> <p>Many web services provide an <em>application programmer interface</em> (API) for developers to enable their programs to access the service. Some ways to discover APIs are through the website <a href="http://programmableweb.com">http://programmableweb.com</a> or just by doing a web search for the service name and “API”.</p> <p>The Yahoo! Finance API is documented in gory detail at <a href="http://www.gummy-stuff.org/Yahoo-data.htm">http://www.gummy-stuff.org/Yahoo-data.htm</a> . The highlights are that you can get the latest price for the stock with the symbol "GOOG", for example, with the URL <a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=GOOG">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=GOOG</a> . The section "f=l1" (lower-case letter L, followed by the number 1) says we would like the latest price, and the section “s=GOOG” says we would like information about the stock whose symbol is “GOOG”. The result is returned in comma-separated value (CSV) format, which you may be familiar with from spreadsheets. Since only one value will be returned for our query, the result will be a plain old number, such as “511.5”, without any commas. (Commas would be used if we requested multiple pieces of data from Yahoo!, such as the name of the company and the daily trade volume.)</p> <h4 class="ai-header">Add Behaviors to the Components</h4> <h5 class="ai-header">Requesting the Data</h5> <p>The blocks to make the web request are shown here and detailed below:</p> <p><img src="/sites/all/files/tutorials/stockQuotes/request-data.png" /></p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Block type </td> <td> Drawer </td> <td> Purpose </td> </tr><tr><td><span class="basicblock">GetQuoteButton.Click</span></td> <td>GetQuoteButton</td> <td>Handle a click of the "Get Quote" button.</td> </tr><tr><td><span class="setblock">set Web1.Url to</span></td> <td>Web1</td> <td>Specify the URL to request.</td> </tr><tr><td><span class="textblock">call make text</span></td> <td>Text</td> <td>Concatenate the parts of the URL.</td> </tr><tr><td><span class="textblock">text</span> (<a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=</a>)</td> <td>Text</td> <td>Specify the first unchanging part of the URL.</td> </tr><tr><td><span class="argblock">StockSymbolTextBox.Text</span></td> <td>StockSymbolTextBox</td> <td>Get the stock symbol from the text box.</td> </tr><tr><td><span class="callblock">call Web1.Get</span></td> <td>Web1</td> <td>Make the web request.</td> </tr></table><p>The meaning is: When GetQuoteButton is clicked:</p> <ol><li>Build the Web component’s URL by concatenating “<a href="http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=">http://finance.yahoo.com/d/quotes.csv?f=l1&amp;s=</a>” (which you should copy and paste into the text block) and the symbol entered by the user (StockSymbolTextBox.Text).</li> <li>Request the page specified by the URL. (This is like pressing return after entering a URL in your web browser.)</li> </ol><h5 class="ai-header">Receiving the Data </h5><p>When the response to the web request arrives, the <span class="basicblock">Web.GotText</span> event is raised with four parameters (only some of which we’ll use in this app):</p> <ol><li><b>url</b>: the URL of the original request (which is useful if requests are made with many different URLs).</li> <li><b>responseCode</b>: <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">the HTTP status code</a>, which indicates whether the web request succeeded or how it failed; for example, 200 means that the request succeeded, 404 that the page could not be found, etc.</li> <li><b>responseType</b>: <a href="http://en.wikipedia.org/wiki/Mime_type">the MIME type</a> of the response, such as “text/csv” in this app, “image/jpeg”, etc.</li> <li><b>responseContent</b>: the data being returned, such as “511.5”.</li> </ol><p>Here are a picture and table of the blocks you need to create:</p> <p><img src="/sites/all/files/tutorials/stockQuotes/receive-data.png" /></p> <table><tr style="background-color: #EFEFEF; font-weight: bold;"><td> Block type </td> <td> Drawer </td> <td> Purpose </td> </tr><tr><td><span class="basicblock">Web1.GotText</span></td> <td>Web1</td> <td>Specify what to do when the reply comes back from the web.</td> </tr><tr><td><span class="controlblock">ifelse</span></td> <td>Control</td> <td>Provide different behavior depending on whether the request succeeded.</td> </tr><tr><td><span class="argblock">value responseCode</span></td> <td>My Definitions</td> <td>The response code returned for the web request, which...</td> </tr><tr><td><span class="basicblock"> = </span>(equals) block</td> <td>Math</td> <td>...is checked for equality with...</td> </tr><tr><td><span class="basicblock">number</span> (200)</td> <td>Math</td> <td>...200, the code for valid web responses.</td> </tr><tr><td><span class="setblock">set ValueLabel.Text to</span></td> <td>ValueLabel</td> <td>Display the result on the screen.</td> </tr><tr><td><span class="textblock">call make text</span></td> <td>Text</td> <td>Build the result by concatenating...</td> </tr><tr><td><span class="textblock">text</span> ("Current value: ")</td> <td>Text</td> <td>...the text “Current value: “ and...</td> </tr><tr><td><span class="argblock">value responseContent</span></td> <td>My Definitions</td> <td>...the value returned from the web.</td> </tr><tr><td><span class="setblock">set ValueLabel.Text to</span></td> <td>ValueLabel</td> <td>Display an error message.</td> </tr><tr><td><span class="textblock">text</span> ("Error getting stock quote")</td> <td>Text</td> <td>The error message</td> </tr></table><p>Here's a description of the block's behavior:</p> <ol><li>If the response code indicates that the web request succeeded (= 200), set the label to the concatenation of “Current value: “ and the returned data (e.g., 511.5).</li> <li>Otherwise, set the label to “Error getting stock quote”.</li> </ol><h4 class="ai-header">Review</h4> <p>Here are some ideas introduced in this tutorial:</p> <ol><li>Using an application programmer interface (API)</li> <li>Making a request with the Web component</li> <li>Checking whether a web request was successful</li> <li>Displaying information returned from the web</li> </ol><p>These ideas will be developed further in the second part of this tutorial, which is under development.</p> <h4 class="ai-header">Scan the Sample App to your Phone</h4> <p>Scan the following barcode onto your phone to install and run the sample app. </p><p><img src="/sites/all/files/tutorials/stockQuotes/StockQuotesBarcode.png" /></p> <h4 class="ai-header">Download Source Code</h4> <p>If you'd like to work with this sample in App Inventor, download the <a href="/sites/all/files/tutorials/stockQuotes/StockQuotes.zip">source code</a> to your computer, then open App Inventor, go to the My Projects page, and choose <b>More Actions | Upload Source</b>.</p> <h4 class="ai-header">Credits</h4> <pre class="ai-box">This tutorial is based on <a href="http://appinventorblog.com/2011/06/02/app-inventor-has-a-new-component-the-web/">an app created by Prof. David Wolber</a> and relies on the Yahoo! Finance API. Done with <span style="color:black;">StockQuotes</span>? Return to the other tutorials <a href="/tutorials">here</a>.</pre></div></div></div><section class="field field-name-field-version field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Version:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-version/app-inventor-1" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">App Inventor 1</a> </li> </ul> </section> <section class="field field-name-field-tutorial-difficulty field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Difficulty:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-difficulty/advanced" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Advanced</a> </li> </ul> </section> <section class="field field-name-field-tutorial-type field-type-taxonomy-term-reference field-label-above view-mode-rss clearfix"> <h2 class="field-label">Tutorial Type:&nbsp;</h2> <ul class="field-items"> <li class="field-item even"> <a href="/tutorial-type/external-api" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">External API</a> </li> </ul> </section> Fri, 14 Jun 2013 16:23:17 +0000 aaron 323 at http://dev-explore.appinventor.mit.edu http://dev-explore.appinventor.mit.edu/content/stockquotes#comments