使用C#检索API数据

时间:2013-11-21 21:59:19

标签: c# sql-server api

我有一个url地址以便检索API数据,如果我将URL地址粘贴到浏览器的文本框中然后按回车键,它会询问我是否要保存它。格式为XML。

我的请求是使用C#检索API数据并将其保存到SQL服务器的表中。

我遇到的障碍是我需要使用C#语法才能做到这一点?有什么建议吗?

没有第三人称应用程序或Visual Studio 2008加载项。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Net;


namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {


            string uri = "http://api.arbetsformedlingen.se/platsannons/matchning?kommunid=180&nyckelord=bagare";
            var result = "";
            try
            {
                using (WebClient webClient = new WebClient())
                {
                    using (var stream = webClient.OpenRead(uri))
                    {
                        using (var streamReader = new StreamReader(stream))
                        {
                            result = streamReader.ReadToEnd();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var wtf = ex.Message;
            }


        }
    }
}

2 个答案:

答案 0 :(得分:2)

我终于找到了如何调用API - 这并不容易,因为我不会说的语言,但无论如何。该服务期望始终设置两个参数,默认情况下不填充它们。参数是:Accept and Accept-Language。一旦设置完毕,一切都按预期工作。该服务的基本URL为http://api.arbetsformedlingen.se/,带参数的方法为(例如)platsannons/matchning?kommunid=180

使用标准(.NET Framework 3.5中提供)WebClient class检索数据的一种可能性如下所示:

try
{
    // API base address
    var baseUrl = @"http://api.arbetsformedlingen.se/";
    // method platsannons/soklista/komunner with parameter landid set to some value
    var method = string.Format("platsannons/soklista/kommuner?lanid={0}", 10);
    var client = new WebClient();
    // important - the service requires this two parameters!
    client.Headers.Add(HttpRequestHeader.Accept, "application/xml");
    client.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US");
    // retrieve content
    var responseContent = client.DownloadString(string.Format("{0}{1}", baseUrl, method));
    // "create" the xml object
    var xml = XDocument.Parse(responseContent);
    // do something with the xml
    xml.Root.Descendants("sokdata").ToList().ForEach(li =>
    {
        Console.WriteLine(string.Format("{0} - {1}", li.Element("id").Value, li.Element("namn").Value));
    });
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
    exception.Dump();
}

输出结果为:

1082 - Karlshamn
1080 - Karlskrona
1060 - Olofström
1081 - Ronneby
1083 - Sölvesborg
9090 - Ospecificerad arbetsort

对于数据库部分 - 您需要决定要保存哪些数据以及如何:单个值(如id,name等)或一次完整的xml响应或其他内容。确定后,您可以设计表格并继续保存数据。


我假设 C#语法你的意思是我如何

  • 从网上下载内容
  • 将其保存到MSSQL数据库

将C#与标准.NET Framework一起使用(没有第三方库)。

让我们从第一点开始: .NET Framework具有专门用于此类任务的内置web client component called WebClient

WebClient client = new WebClient ();
Stream data = client.OpenRead (URI);
StreamReader reader = new StreamReader (data);
string s = reader.ReadToEnd ();
...

使用客户端访问和下载内容。您可以将凭据和其他参数传递给客户端,以便该请求等同于对网页的浏览器调用

如何存储结果: 如果Web请求的结果是XML格式,那么LINQ to XML technology就是一个不错的选择。使用起来非常简单直观。 LINQ的另一个优点是它还支持访问MSSQL服务器,因此您可以使用LINQ to SQL轻松地将获取的数据添加到数据库中。创建DBML文件后,使用LINQ向表中添加数据的代码非常简单:

Data data = new Data
{
    Id = 123,
    Tag = "some data",
    TimeStamp = DateTime.Now
    // …
};
// Add data to table.
db.Data.InsertOnSubmit(data);
db.SubmitChanges();

您还可以选择标准ADO.NET access,它非常灵活且功能强大。代码可能如下所示:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    // Create the Command and Parameter objects.
    SqlCommand command = new SqlCommand("insert into", connection);
    command.Parameters.AddWithValue("@TagName", "some data...");
    // open connection to the database
    connection.Open();
    SqlDataReader reader = command.ExecuteNonQuery();
}

在这种情况下的缺点(有时候是优势)是你需要照顾一切 - 从连接和命令到执行和读取结果。但是选择就在那里。

答案 1 :(得分:0)

HttpClient加载xml数据 http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx

然后解析为XmlDocument,根据需要处理