2011-03-20 4 views
1

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

Вам не нужно split вместо запятой вместо запятой?

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

Когда я запускаю код, используя выше, и заменяющий Тост с

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

я получаю:

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

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

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

+0

да, это было решение. тоже понял это :). Мне также нужно было использовать replaceAll, чтобы избавиться от котировок. – locoboy

0
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, что вы получаете правильно.

+0

Да, я не совсем уверен, где я ошибаюсь. – locoboy

+1

У меня есть фрагмент кода php для того же самого. если вы хотите, я могу поделиться им с вами. –

+0

уверен, что я хотел бы видеть, что – locoboy

0
<?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> 
Смежные вопросы