C# 在tinysong.com上按ID搜索

C# 在tinysong.com上按ID搜索,c#,post,httpwebrequest,request,C#,Post,Httpwebrequest,Request,我试图在我自己的应用程序中创建tinysong和grooveshark之间的交互 现在我真正想要的是能够质疑tinysong上一首歌的ID,看看它是否存在 如果你在tinysong上搜索一首歌,WebAddress会显示这首歌的ID,如下所示 其中25062638是ID 我尝试创建一个httpwebrequest,然后刮取结果,看看ID是否有效以及名称是什么,但这是一个Ajax调用,因此结果不会显示在httpwebrequest上 我也研究过firebug(我不是很擅长),我在那里看到了这一点

我试图在我自己的应用程序中创建tinysong和grooveshark之间的交互

现在我真正想要的是能够质疑tinysong上一首歌的ID,看看它是否存在

如果你在tinysong上搜索一首歌,WebAddress会显示这首歌的ID,如下所示

其中25062638是ID

我尝试创建一个httpwebrequest,然后刮取结果,看看ID是否有效以及名称是什么,但这是一个Ajax调用,因此结果不会显示在httpwebrequest上

我也研究过firebug(我不是很擅长),我在那里看到了这一点 有一个使用postdata发送到tinysong.com?s=sh的post请求

q%5B%5D=25062638&q%5B%5D=搜索&q%5B%5D=aa

其中第一个是ID,第二个是静态搜索,第二个是searchtext,我输入了(aa)

我试图用上面的postdata重新创建post请求到路径,但它返回页脚

这是我写的代码:

  string html = string.Empty;


  string requestString = @"http://tinysong.com?s=sh";
  HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(requestString);

  ASCIIEncoding encoding = new ASCIIEncoding();
  string postData = "q%5B%5D=4&q%5B%5D=search&q%5B%5D=aa";

  byte[] data = encoding.GetBytes(postData);

  HttpWReq.Method = "POST";
  HttpWReq.ContentType = "application/x-www-form-urlencoded";
  HttpWReq.ContentLength = data.Length;

  Stream newStream = HttpWReq.GetRequestStream();
  newStream.Write(data, 0, data.Length);

  newStream.Close();


  // Create the web request  


  // Get response  
  using (HttpWebResponse response = HttpWReq.GetResponse() as HttpWebResponse)
  {
    // Get the response stream  
    StreamReader reader = new StreamReader(response.GetResponseStream());

    // Console application output  
   html = reader.ReadToEnd();
  }

我肯定在这里遗漏了一些东西,因此任何帮助都将受到感谢。

您的代码看起来有点重。我建议您使用以下方法进行简化:

使用系统;
使用System.Collections.Generic;
使用System.Collections.Specialized;
Net系统;
使用系统文本;
使用System.Web.Script.Serialization;
班级计划
{
静态void Main()
{
使用(var client=new WebClient())
{
var values=新的NameValueCollection
{
{“q[]”,“25062638”},
{“q[],“search”},
{“q[]”,“aa”},
};
var result=client.UploadValues(“http://tinysong.com?s=sh“、价值观);
var json=Encoding.UTF8.GetString(结果);
var serializer=新的JavaScriptSerializer();
var obj=(IDictionary)serializer.DeserializeObject(json);
//在返回的JSON中还有obj[“html”]
Console.WriteLine(obj[“message”]);
//TODO:我们已经获取了HTML,现在您可以将其刮除以便
//提取您感兴趣的信息。您可以使用
//用于此任务的Html解析器(如Html Agility Pack):
// http://htmlagilitypack.codeplex.com/
}
}
}

您的代码看起来有点重。我建议您使用以下方法进行简化:

使用系统;
使用System.Collections.Generic;
使用System.Collections.Specialized;
Net系统;
使用系统文本;
使用System.Web.Script.Serialization;
班级计划
{
静态void Main()
{
使用(var client=new WebClient())
{
var values=新的NameValueCollection
{
{“q[]”,“25062638”},
{“q[],“search”},
{“q[]”,“aa”},
};
var result=client.UploadValues(“http://tinysong.com?s=sh“、价值观);
var json=Encoding.UTF8.GetString(结果);
var serializer=新的JavaScriptSerializer();
var obj=(IDictionary)serializer.DeserializeObject(json);
//在返回的JSON中还有obj[“html”]
Console.WriteLine(obj[“message”]);
//TODO:我们已经获取了HTML,现在您可以将其刮除以便
//提取您感兴趣的信息。您可以使用
//用于此任务的Html解析器(如Html Agility Pack):
// http://htmlagilitypack.codeplex.com/
}
}
}

谢谢你,Darin,你说的对,这帮了大忙,但我也有同样的问题,如果你看看HTML所包含的内容,出于某种原因,它只是页面下半部分的一部分,而不是我想要刮取的实际“歌曲数据”…啊,啊,我刚刚意识到json响应中有一个HTML部分,还有一个消息部分,这就是我需要的部分,我刚刚用obj[“message”]替换了obj[“html”],我得到了我想要的,非常感谢Darin@user1204023,我已经更新了我的答案以反映这一点。如果这篇文章有助于你解决这个问题,你可以考虑点击旁边的记号。谢谢你,达林,你的权利,这帮助了很多,但我有同样的问题,如果你看看HTML包含什么,它只是页面的下半部分的一部分原因,而不是实际的“歌曲数据”。我想刮…啊,啊,啊,我刚刚意识到json响应中有一个HTML部分,还有一个消息部分,有我需要的部分,我只是用obj[“消息”]替换了obj[“HTML”],我得到了我想要的,非常感谢Darin@user1204023,我已经更新了我的答案以反映这一点。如果这篇文章帮助你解决了你所遇到的问题,你可以通过点击旁边的记号来考虑。
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;

class Program
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            var values = new NameValueCollection
            {
                { "q[]", "25062638" },
                { "q[]", "search" },
                { "q[]", "aa" },
            };
            var result = client.UploadValues("http://tinysong.com?s=sh", values);
            var json = Encoding.UTF8.GetString(result);
            var serializer = new JavaScriptSerializer();
            var obj = (IDictionary<string, object>)serializer.DeserializeObject(json);

            // there's also obj["html"] in the returned JSON
            Console.WriteLine(obj["message"]);

            // TODO: we have fetched the HTML, now you could scrape it in order to
            // extract the information you are interested in. You could use
            // an Html parser such as Html Agility Pack for this task:
            // http://htmlagilitypack.codeplex.com/
        }
    }
}