如何在C#中从API访问和使用XML

时间:2010-03-08 05:09:57

标签: c# .net xml api

我的目标是从API中提取XML数据并将其加载到SQL Server数据库。我在这里尝试的第一步是访问数据并显示它。一旦我开始工作,我将循环遍历每一行并将值插入到sql server数据库中。当我尝试运行代码时,没有任何反应,当我将网址直接粘贴到浏览器中时,我收到此错误

"2010-03-08 04:24:17 Wallet exhausted: retry after 2010-03-08 05:23:58. 2010-03-08 05:23:58"

对我而言,似乎foreach循环的每次迭代都会调用该站点,并且我被阻止了一个小时。我是否以错误的方式从API检索数据?有没有办法将数据加载到内存或数组然后循环?

这是我一起攻击的一些代码。

using System;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            string userID = "123";
            string apiKey = "abc456";
            string characterID = "789";
            string url = "http://api.eve-online.com/char/WalletTransactions.xml.aspx?userID=" + userID + "&apiKey=" + apiKey + "&characterID=" + characterID;
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(url);
            XmlNamespaceManager xnm1 = new XmlNamespaceManager(xmldoc.NameTable);
            XmlNodeList nList1 = xmldoc.SelectNodes("result/rowset/row", xnm1);
            foreach (XmlNode xNode in nList1)
            {
                Response.Write(xNode.InnerXml + "<br />");
            }
        }

        catch (SqlException em)
        {
            Response.Write(em.Message);
        }
    }
}

以下是xml

的示例
<eveapi version="2"> 
  <currentTime>2010-03-06 17:38:35</currentTime> 
  <result> 
    <rowset name="transactions" key="transactionID" columns="transactionDateTime,transactionID,quantity,typeName,typeID,price,clientID,clientName,stationID,stationName,transactionType,transactionFor"> 
      <row transactionDateTime="2010-03-06 17:16:00" transactionID="1343566007" quantity="1" typeName="Co-Processor II" typeID="3888" price="1122999.00" clientID="1404318579" clientName="unseenstrike" stationID="60011572" stationName="Osmeden IX - Moon 6 - University of Caille School" transactionType="sell" transactionFor="personal" /> 
      <row transactionDateTime="2010-03-06 17:15:00" transactionID="1343565894" quantity="1" typeName="Co-Processor II" typeID="3888" price="1150000.00" clientID="1404318579" clientName="unseenstrike" stationID="60011572" stationName="Osmeden IX - Moon 6 - University of Caille School" transactionType="sell" transactionFor="personal" /> 
    </rowset> 
  </result> 
  <cachedUntil>2010-03-06 17:53:35</cachedUntil> 
</eveapi>

2 个答案:

答案 0 :(得分:4)

一些快速搜索(谷歌)显示this is the EVE API cache mechanism kicking in。如果您从同一个密钥和IP查询相同的数据,它会告诉您重新使用已有的数据。因此,请确保将您的任何结果写入直接 。一些缓存时间是1天......

答案 1 :(得分:1)

@Jarek  您可以将xml文件作为本地缓存存储到您的Web服务器文件结构,如... / Users / thisusersid / mycustomfile_02102011.xml,然后当用户再次登录时,只需拉动文件,拆分文件名,检查日期和使用最新的文件作为默认文件。然后,您可以允许用户通过单击按钮/链接手动从eveapi更新其数据,以检索最新的&amp;最大的。