Лучший способ прочитать ответ Rapidshare API? - PullRequest
3 голосов
/ 16 декабря 2009

Я начал работать с API Rapidshare.com. Мне просто интересно, как лучше всего прочитать ответ и вызов API.

Если честно, я думаю, что API повсюду. Некоторые ответы разделяются запятыми, и это нормально. У меня проблемы с ответом на информацию аккаунта. Это не разделенный запятыми, и поля могут не всегда быть в том же порядке.

Вот пример ответа: accountid = 123456 type = prem servertime = 1260968445 addtime = 1230841165 validuntil = 1262377165 username = DOWNLOADER directstart = 1 protectfiles = 0 rsantihack = 0 plustrafficmode = 0 зеркал = jsconfig = 1 email=take@hike.com lots = 0 ppoints = 120 фо 10 curfiles = 150 curspace = 800426795 bodkb = 5000000 premkbleft = 23394289 ppointrate = 93

Я думаю, что регулярное выражение - это путь сюда. Вот мое выражение, которое, кажется, содержит все ответы, которые содержат значения: (AccountID | тип | ServerTime | AddTime | validuntil | Имя пользователя | directstart | protectfiles | rsantihack | plustrafficmode | Зеркала | jsconfig | почта | земли | fpoints | ppoints | curfiles | curspace | bodkb | premkbleft | ppointrate | refstring | печенье) \ = [ \ ш ._ @] +

Если порядок данных следует считать случайным, то как определить, какое значение является каким?

Мне просто интересно, как все остальные работают с этим.

Спасибо

Конор

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009

Я полагаю, c #.

string[] s = @"accountid=123456 type=prem servertime=1260968445 addtime=1230841165 validuntil=1262377165 username=DOWNLOADER directstart=1 protectfiles=0 rsantihack=0 plustrafficmode=0 mirrors= jsconfig=1 email=take@hike.com lots=0 fpoints=12071 ppoints=10 curfiles=150 curspace=800426795 bodkb=5000000 premkbleft=23394289 ppointrate=93".Split(" ");
var params = new Dictionary<string, string>();
foreach(var l in s)
{
 var tmp = l.Split("=");
 params[tmp[0]] = params[tmp[1]];
}

(может содержать ошибки ... но идея очевидна?)

0 голосов
/ 18 декабря 2009

Вот что я сделал.

Это просто рабочая версия кода от Yossarian.

            // Command to send to API
        String command = "sub=getaccountdetails_v1&type=prem&login="+Globals.username+"&password="+Globals.password;

        // This will return the response from rapidshare API request.
        // It just performs @ webrequest and returs the raw text/html. It's only a few lines. Sorry I haven't included it here.
        String input  = executeRequest(command);

        input = input.Trim();
        string[] s = input.Split('\n');

        Dictionary<string,string> terms = new Dictionary<string, string>();
        foreach(var l in s)
        {
             String[] tmp = l.Split('=');
             terms.Add(tmp[0], tmp[1]);
        }
        foreach (KeyValuePair<String, String> term in terms)
        {
            txtOutput.Text += term.Key + " :: " + term.Value+"\n";
        }

Спасибо за вашу помощь, ребята.

0 голосов
/ 16 декабря 2009

Возможно, вы захотите разделить это на объект Dictionary, чтобы получить доступ к значению по ключу.

Вот пример консольного приложения C #, которое работает с .NET 3.5:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace SO
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = @"accountid=123456 type=prem servertime=1260968445";

            string pattern = @"(?<Key>[^ =]+)(?:\=)(?<Value>[^ ]+)(?=\ ?)";

            Dictionary<string, string> fields = 
                (from Match m in Regex.Matches(input, pattern)
                   select new
                   {
                       key = m.Groups["Key"].Value,
                       value = m.Groups["Value"].Value
                   }
                ).ToDictionary(p => p.key, p => p.value);

            //iterate over all fields
            foreach (KeyValuePair<string, string> field in fields)
            {
                Console.WriteLine(
                    string.Format("{0} : {1}", field.Key, field.Value)
                );
            }

            //get value from a key
            Console.WriteLine(
                string.Format("{0} : {1}", "type", fields["type"])
            );

        }
    }
}

Ссылка на другой пример в PHP:

Как использовать Rapidshare API для получения данных учетной записи ?? PHP вопрос

...