Поиск по ID на tinysong.com - PullRequest
       26

Поиск по ID на tinysong.com

1 голос
/ 11 февраля 2012

я пытаюсь создать взаимодействие между tinysong и grooveshark в моем собственном приложении

Теперь, что я действительно хочу, так это чтобы у меня была возможность задать вопрос идентификатору песни на tinysong, чтобы узнать, существует она или нет.

если вы ищете песню на tinysong, веб-адрес покажет вам идентификатор этой песни

http://tinysong.com/#/share/aa/25062638

, где 25062638 - идентификатор ..

Я попытался создать httpwebrequest, а затем очистить результат, чтобы убедиться, что идентификатор действителен и как его зовут, но это Ajax-вызов, поэтому результат не отображается в httpwebrequest ..

Я также заглянул в firebug (что я не очень хорош в этом), и я вижу там, что есть запрос на публикацию tinysong.com?s=sh с данными поста

д% 5B% 5D = 25062638 & д% 5B% 5D = поиск & д% 5B% 5D = аа

где первый - идентификатор, второй - статический поиск, а второй - текст поиска, который я набрал (aa)

Я попытался воссоздать запрос на публикацию по пути с указанными выше данными, но он возвращает нижний колонтитул ??!

Это код, который я написал:

  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();
  }

Я определенно что-то здесь упускаю, поэтому любая помощь будет оценена.

1 Ответ

1 голос
/ 11 февраля 2012

Ваш код выглядит немного тяжелым. Позвольте мне предложить вам упрощение с использованием WebClient :

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/
        }
    }
}
...