【问题标题】:Get latest Currency获取最新货币
【发布时间】:2016-09-27 09:31:17
【问题描述】:

我想编写一个简单的控制台应用程序来显示最新的美元货币。 数据将取自国家银行 - http://www.nbg.ge/rss.php

这是我的代码:

        string data = string.Empty;
        string url = "http://www.nbg.ge/rss.php";
        string html = string.Empty;
        string pattern = "USD</td>\r\n<td align=\"right\">(.*)</td>";
        DateTime today = DateTime.Now;
        data = today.Date.ToShortDateString();
        HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
        HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
        StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream());
        html = myStreamReader.ReadToEnd();
        Match match = Regex.Match(html, pattern);
        Console.WriteLine("{0} USD EXCHANGE RATE {1}.", data, match.Groups[1].ToString());
        Console.ReadLine();

如何从网站获取美元数据? 谢谢。

更新!

我将“模式”更改为string pattern = "&lt;td.*?&gt;(.*?)&lt;\\/td&gt;"; 它显示列表中的第一个 td 项目: 2016 年 5 月 29 日美元汇率 AED。

【问题讨论】:

  • 您没有描述问题或实际提出问题
  • 从网站获取数据后,您的问题是一个正则表达式问题,因此您必须发布网站的示例输出(html = myStreamReader.ReadToEnd(); 的值)
  • &lt;td&gt;USD&lt;/td&gt; &lt;td&gt;1 ??? ??????&lt;/td&gt; &lt;td&gt;2.1461&lt;/td&gt; &lt;td&gt;&lt;img src="https://www.nbg.gov.ge/images/green.gif"&gt;&lt;/td&gt; &lt;td&gt;0.0000&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;

标签: c# html xml webrequest


【解决方案1】:

在 PHP 中,您可以像这样结合使用 CURL、SimpleXMLDocument、文件和数组助手轻松做到这一点:

     <?php


        $defaults = array(
            CURLOPT_URL             => 'http://www.nbg.ge/rss.php',
            CURLOPT_POST            => true,
            CURLOPT_RETURNTRANSFER  => true,
        );
        $curl           = curl_init();
        curl_setopt_array($curl, $defaults);

        $v  = "";


        // SHOULD ANY ERROR OCCUR, DISPLAY THE ERROR(S), DO GARBAGE COLLECTION & TERMINATE THE PROGRAM.
        $curl_response  = curl_exec($curl);
        if( curl_errno($curl)){
            var_dump( curl_error($curl));
            curl_close($curl);
            exit;
        }else{
            // PROCESS THE RSS FEED...
            if($curl_response){
                $sxElem     = new SimpleXMLElement($curl_response);
                $xml        = simplexml_load_string($curl_response, 'SimpleXMLElement', LIBXML_NOCDATA);    //LIBXML_NOCDATA LIBXML_NOWARNING
                foreach($xml as $key=>$data){

                    if($a = $data->item){
                        /**@var SimpleXMLElement $desc */
                        $desc   = $a->description;
                        $v      = print_r($a->description, true);
                    }

                }
            }
        }
        // SAVE THE DATA TO A TEXT FILE TO BE READ LINE BY LINE LATER...
        file_put_contents("data.txt", $v);

        // GET THE DATA FROM THE TEXT FILE AND THEN EXPLODE TO AN ARRAY
        $data           = file_get_contents("_data.txt");
        $arrData        = explode("\n", $data);
        $countryCodes   = array();
        $exchangeRates  = array();

        // LOOP THROUGH EACH LINE & SORT OUT THE DATA YOU NEED...
        foreach($arrData as $lineNum=>$lineData){
            $countryCode    = null;
            if( preg_match("#(<td>)([A-Z]{3})(<\/td>)#", $lineData, $matches)){
                list(, $n1, $countryCode, $n2)    = $matches;
                if(!array_key_exists($countryCode, $exchangeRates)){
                    $countryCodes[]     = $countryCode;
                }
            }
            if( preg_match("#(<td>)([0-9\.]*)(<\/td>)#", $lineData, $matches2)){
                list(, $n1, $rate, $n2) = $matches2;
                if($rate != "0.0000"){
                    $exchangeRates[]        = $rate;
                }
            }
        }

        $arrExchange        = array_combine($countryCodes, $exchangeRates);
        $jsonExchangeRate   = json_encode($arrExchange);

        var_dump($arrExchange);
        var_dump($jsonExchangeRate);

第一次 var_dump 的结果是:

        array (size=43)
          'AED' => string '5.8432' (length=6)
          'AMD' => string '4.4921' (length=6)
          'AUD' => string '1.5491' (length=6)
          'AZN' => string '1.4388' (length=6)
          'BGN' => string '1.2263' (length=6)
          'BRL' => string '0.5989' (length=6)
          'BYR' => string '1.0898' (length=6)
          'CAD' => string '1.6465' (length=6)
          'CHF' => string '2.1662' (length=6)
          'CNY' => string '3.2708' (length=6)
          'CZK' => string '0.8875' (length=6)
          'DKK' => string '3.2253' (length=6)
          'EGP' => string '2.4197' (length=6)
          'EUR' => string '2.3985' (length=6)
          'GBP' => string '3.1438' (length=6)
          'HKD' => string '2.7637' (length=6)
          'HUF' => string '0.7631' (length=6)
          'ILS' => string '5.5821' (length=6)
          'INR' => string '3.2016' (length=6)
          'IRR' => string '0.7082' (length=6)
          'ISK' => string '1.7194' (length=6)
          'JPY' => string '1.9585' (length=6)
          'KGS' => string '3.1414' (length=6)
          'KRW' => string '1.8198' (length=6)
          'KWD' => string '7.1039' (length=6)
          'KZT' => string '0.6392' (length=6)
          'MDL' => string '1.0714' (length=6)
          'NOK' => string '2.5844' (length=6)
          'NZD' => string '1.4469' (length=6)
          'PLN' => string '5.4544' (length=6)
          'QAR' => string '5.8943' (length=6)
          'RON' => string '5.3217' (length=6)
          'RSD' => string '1.9438' (length=6)
          'RUB' => string '3.2531' (length=6)
          'SEK' => string '2.5872' (length=6)
          'SGD' => string '1.5619' (length=6)
          'TJS' => string '2.7273' (length=6)
          'TMT' => string '6.1317' (length=6)
          'TRY' => string '0.7288' (length=6)
          'UAH' => string '0.8538' (length=6)
          'USD' => string '2.1461' (length=6)
          'UZS' => string '0.7351' (length=6)
          'ZAR' => string '1.3802' (length=6)

JSON Equivalent 的结果是:

    '{"AED":"5.8432","AMD":"4.4921","AUD":"1.5491","AZN":"1.4388","BGN":"1.2263","BRL":"0.5989","BYR":"1.0898","CAD":"1.6465","CHF":"2.1662","CNY":"3.2708","CZK":"0.8875","DKK":"3.2253","EGP":"2.4197","EUR":"2.3985","GBP":"3.1438","HKD":"2.7637","HUF":"0.7631","ILS":"5.5821","INR":"3.2016","IRR":"0.7082","ISK":"1.7194","JPY":"1.9585","KGS":"3.1414","KRW":"1.8198","KWD":"7.1039","KZT":"0.6392","MDL":"1.0714","NOK":"2.5844","NZD":"1.4469","PLN":"5.4544","QAR":"5.8943","RON":"5.3217","RSD":"1.9438","RUB":"3.2531","'... (length=646)

【讨论】:

    【解决方案2】:

    XML 数据有错误。不得不使用正则表达式来修复。图片标签在结束标签前缺少一个“/”。这是解析结果。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.Linq;
    using System.Text.RegularExpressions;
    
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            const string url = "http://www.nbg.ge/rss.php";
            public Form1()
            {
                InitializeComponent();
    
                XElement rss = XElement.Load(url);
                DataTable dt = new DataTable();
                dt.Columns.Add("Currency", typeof(string));
                dt.Columns.Add("Description", typeof(string));
                dt.Columns.Add("Rate", typeof(decimal));
    
    
                XElement description = rss.Descendants("item").FirstOrDefault().Descendants("description").FirstOrDefault();
                string value = description.Value;
                value = Regex.Replace(value, "(src=\\\"[^\\\"]+\\\")", "$1/");
                XElement table = XElement.Parse(value);
    
    
                foreach (XElement row in table.Descendants("tr"))
                {
                    List<XElement> columns = row.Elements("td").ToList();
                    dt.Rows.Add(new object[] {(string)columns[0], (string)columns[1], (decimal)columns[2]});
                }
                dataGridView1.DataSource = dt;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 2013-05-18
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多