Wpis z mikrobloga

#wykopapi #programowanie

Mam problem z WypokAPI :< Jestem newfag w REST więc błagam mirki o wyrozumiałość. Rzuciłem się na wypokowe api, żeby sobie coś przykodzić w wolnych chwilach ale coś ciężko mi idzie jak widać. Ciągle wywala mi komunikat o złym kluczu aplikacji. Musiałem coś #!$%@?ć, nawet bardzo. Tylko co? Ktoś może mi pomóc?

Na początek chciałem pobrać najlepsze wykopy w miesiącu. To jest znaczący fragment funkcji która ma mi zwracać jsona (no ale zwraca jedynie komunikat "Niepoprawny klucz API"):

string url = "[http://a.wykop.pl/links/promoted/appkey,"](http://a.wykop.pl/links/promoted/appkey,") + appKey + ",sort,month";
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(url);
            string md5Hash = GetMd5Hash(MD5.Create(), appSecret + url);          
            HttpResponseMessage response = httpClient.GetAsync(md5Hash).Result;  // Blocking call!

            return response.Content.ReadAsStringAsync().Result;     
  • 10
@Ginden: O Panie, dzięki za odpowiedz, ale zanim zapastowałem tutaj, to przeleciałem multum stron tagu #wykopapi w poszukiwaniu pomocy i próbowałem tego rozwiązania (niektórym pomagało) ^^ Niestety dalej dupa ( ͡° ʖ̯ ͡°)
@Ginden: Chociaż teraz spróbowałem zmienić wszystkie " , " na " / " i teraz zwraca mi niepoprawne podpisanie żądania.
W tagu znalazłem podpowiedź, żeby zmienić tylko przy appkey/aBcDeFgHiJ

Tak czy siak coś robię źle i nie wiem co :/
@smaleckg: Ale to by się kłóciło z konwencją zapisaną w dokumentacji Api:

parametry API – są to parametry związane z autoryzacją lub parametryzacją żądania. Parametry przekazuje się w parach nazwa,wartość, np. appkey,12345,userkey,54321 spowoduje przekazania parametrów appkey o wartości 12345 oraz userkey o wartości 54321.


Ale próbowałem tak jak piszesz i wyskakuje mi komunikat o niepoprawnym podpisaniu żądania.
@smaleckg: Dzięki za link, obczaję.

no to juz inny blad! teraz musisz podpisac żadanie w ciele o ile dobrze pamietam.


No tak, to między innymi robię (przynajmniej tak mi się wydaje). Generuję hash i przekazuję go w funkcji getAsync(hash). Z drugiej strony jeśli robię to źle... to nie tłumaczy to tego, że jeśli za url podstawię link podawany jako przykład w dokumentacji API Wykopu (http://www.wykop.pl/wpis/13642313/#comment-43892003) to również dostaję komunikat o
@smaleckg: Dobra #!$%@?ć tę dokumentację, bo jest tak niekonsekwentnie napisana, że mnie ściska.

Link był dobry, po prostu ja źle podpisywałem żądanie. Poprawiłem na:

string url = "[http://a.wykop.pl/link/index/54321/appkey,"](http://a.wykop.pl/link/index/54321/appkey,") + appKey;
HttpClient httpClient = new HttpClient();
string md5Hash = GetMd5Hash(MD5.Create(), appSecret + url);
var request = new HttpRequestMessage()
{
RequestUri = new Uri(url),
Method = HttpMethod.Get,
};
request.Headers.Add("apisign", md5Hash);
return httpClient.SendAsync(request).Result.Content.ReadAsStringAsync().Result;