我有一个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;
}
}
}
}
答案 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#语法你的意思是我如何:
将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,根据需要处理