2010-03-08 86 views
5

我的目标是从API中提取XML数据并将其加载到sql server数据库。我在这里尝试的第一步是访问数据并显示它。一旦我得到这个工作,我会遍历每一行,并将值插入到SQL Server数据库。当我尝试运行下面没有代码发生时,我直接将URL粘贴到浏览器中我得到这个错误如何从C#中的API访问和使用XML

"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> 
+3

此问题特定于特定的API。只有知道这个特定API的人才能告诉你为什么会这样。 – 2010-03-08 05:12:21

+1

Eve确实有一个开发者论坛,我也会在那里发布这个问题,但我认为这是一个关于如何正确使用XML数据的常见编程问题。 – Jerry 2010-03-08 05:33:32

回答

4

的样品一些快速搜索(谷歌)显示this is the EVE API cache mechanism kicking in。如果您从相同的密钥和IP查询相同的数据,它会告诉您重新使用您已拥有的数据。所以请确保你写出任何结果做到直接到磁盘或数据库。一些缓存时间为1一天......

+0

那么我该如何去做呢?我应该使用下面的文章中描述的方法(WebClient类和它的DownloadFile方法),还是有其他方法在我将数据插入数据库之前存储数据? 35 35 012 012 012 012 012 012 012 – Jerry 2010-03-08 19:22:44

1

@Jarek 你可以只将XML文件存储为一个本地缓存与您网络服务器的文件结构像... /用户/ thisusersid/mycustomfile_02102011.xml,那么当用户登录再次拉动文件,分割文件名,检查日期并使用最近的文件作为默认文件。然后,您可以允许用户通过单击按钮/链接手动更新eveapi中的数据,以检索最新的最新&。