HttpClient возвращает неправильный CSV? - PullRequest
1 голос
/ 20 марта 2011

Привет. Я пытался загрузить CSV-файл с http://download.finance.yahoo.com/d/quotes.csv?s=msft&f=sl1p2 и пытался впоследствии проанализировать данные.Вот код ниже.В настоящее время он возвращает только заголовок HTML в тосте.Любые идеи, почему он не возвращает фактические результаты в CSV?

    Stock stock = new Stock();
    try {

        //need to call yahoo api and get csv -> parse csv for most recent price and price change
        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpGet httpGet = new HttpGet(uri);
        HttpResponse response = httpClient.execute(httpGet, localContext);
        String result = "";

        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        String line = "";
        while ((line = reader.readLine()) != null){

              result += line + "\n";
              String[] RowData = result.split("\n");
              Toast.makeText(this, result, Toast.LENGTH_LONG).show();
              String name = RowData[0];
              String price = RowData[1];
              String change = RowData[2];

              stock.setPrice(Double.parseDouble(price));
              stock.setTicker(name);
              stock.setChange(change);


            }

Ответы [ 3 ]

3 голосов
/ 20 марта 2011

Разве вам не нужно split ставить запятую, а не переводить новую строку?

String[] RowData = result.split(",");

Когда я запускаю код, используя приведенное выше, и замену Toast на

System.out.println("result = "+ result);

Я получаю:

result = "MSFT",24.80,"+0.08%"

и значения name, price и change успешно заполнены.Я вообще не вижу строки заголовка.

Обратите внимание, что соглашение Java гласит, что имена переменных начинаются со строчной буквы, поэтому rowData не RowData.

0 голосов
/ 21 марта 2011
<?php

function getStockSite($stockLink){

   if ($fp = fopen($stockLink, 'r')) {
      $content = '';

      while ($line = fread($fp, 1024)) {
         $content .= $line;
      }
   }

   return $content;  
}

?>

<table cellpadding="0" style="width:700px;" cellspacing="0">

<tr>
<th>Country</th>
<th>Indices</th>
<th>Date</th>
<th>Price</th>
<th>Prev. Price</th>
<th>High</th>
<th>Low</th>
<th>Change</th>
</tr>


<?php

$url="http://finance.yahoo.com/d/quotes.csv?s=^BSESN&f=d1p5phgc6";
try
{
$data = getStockSite($url);
$bse=explode(",",$data);
}
catch(exception $e)
{
}
?>

<tr>
<td>INDIA</td>
<td>SENSEX</td>
<td><?php echo $bse[0];?></td>
<td><?php echo $bse[1];?></td>
<td><?php echo $bse[2];?></td>
<td><?php echo $bse[3];?></td>
<td><?php echo $bse[4];?></td>
<td><?php echo $bse[5];?></td>
<tr>


</table>
0 голосов
/ 20 марта 2011
 http://download.finance.yahoo.com/d/quotes.csv?s=msft&f=sl1p2

URL, который вы предоставляете, содержит два аргумента:

1: s=msft
   -this is the yahoo finance api code for microsoft

2: f=sl1p2 
   - this contains 3 sub-parameters
   - s [it is the company name]
   - l1 [it is the company's last quote price]
   - p2 [it is the price change]

Так что я думаю, что CSV, который вы получаете, является правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...