Wednesday, November 9, 2011

Hemmelig DBA api

Jeg besøger ofte Den Blå Avis når jeg leder efter diverse bras som jeg synes er for dyrt at handle nyt men DBA er efterhånden fuldstændigt forsvundet i alverdens reklamer og forhandler annoncer, for et halvt års tiden siden udgav DBA en Android app.

Ved tilfældighed opdagede jeg at app'en kommunikere med http://api.dba.dk/v1/, men deres webserver er snu og forlanger at man udgiver sig for at være 'iPhone' eller 'Android' i sin User-Agent header.
I virkeligheden var det nok bedre at finde en mere tro useragent, men deres parser er tilsyneladende glad hvis blot strengen indeholder endten iPhone eller Android.

Ved første øjekast har jeg fundet følgende endpoints på servicen:

http://api.dba.dk/public/v1/taxonomy
http://api.dba.dk/public/v1/ads

Den første returnere en række forskellige kategorier som man kan browse efter annoncer i, mens den anden er til at søge med, og tager en række parametre hvor af jeg ikke er sikker på hvad flere af dem gør, en af dem er dog lige ud af landevejen, nemlig q hvor man angiver hvad man vil søge efter.

Eksempel med curl:

curl -A 'iPhone' http://api.dba.dk/public/v1/ads?q=yamaha

Herunder et eksempel på de data man får:




Jeg er spændt på hvad folk ka finde på at opfinde med dette api :)

26 comments:

  1. FAntsstisk havde selv kikket på at lave noget screen scraping.
    har testet med curl og får "curl: (56) Recv failure: Connection reset by peer
    " fejl når jeg prøver.

    ReplyDelete
  2. Jeg har lavet en Crawler til DBA som lister annoncer efter søgeord og sender en mail via smtp, når der kommer nye annoncer. Den bruger intet API udover HtmlAgility pack til .NET.

    ReplyDelete
    Replies
    1. Men hold da kæft et fedt api.. Den lister jo alt fuldstændigt rent i XML format. Du har lige lettet mit arbejde så meget!

      Den lister endda tlf. nr. på alle annoncer!

      Delete
    2. Lige et spørgsmål.. Har du de forskellige parametre som er tilgængelige? F.eks. område?

      Hvis man bruger URL'en så har den parametret &reg=aarhus eller http://www.dba.dk/soeg/reg-koebenhavn/

      :)

      Delete
    3. Jeg har ingen anelse - jeg troede faktisk at de havde lavet det om eller på anden måde lavet så man ikke bare ku tilgå det :)

      Delete
    4. Arh øv. Kunne ellers være godt at kende gyldige parametre.

      Lige nu findes kun søgeord, antal annoncer vist, start fra annonce x, p= pris?, type privat, og sorteringstype f.eks. dato.

      Delete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Tak for info :-) User-Agent er ikke længere påkrævet.

    ReplyDelete
  5. Er der nogen der har parametrene ?

    ReplyDelete
  6. http://api.dba.dk/public/v1/ads?q=kjole&ps=20&pn=2&p=(100-300)&f=xml&dt=private&as=200&sort=date-desc

    Se her: http://api.dba.dk/public

    ReplyDelete
  7. Vil jeg kunne bruge noget af dette til at lave en app til Windows Phone eller Windows8???

    ReplyDelete
  8. lån! lån!! lån!!!
    Leder du efter et velrenommeret og akkrediteret privatlånselskab, der giver lån til livstidsmulighed. Vi tilbyder alle former for lån på en meget hurtig og nem måde, personlige lån, billån, boliglån, studielån, erhvervslån, investeringslån, gældskonsolidering og meget mere. Er du blevet afvist af banker og andre finansielle institutioner? Har du brug for et konsolideringslån eller et pant? Søg ikke mere som vi er her for at gøre alle dine økonomiske problemer en ting fra fortiden. Vi låner midler ud til enkeltpersoner og virksomheder, der har brug for økonomisk bistand til en sats på 2%. Ingen socialsikringsnummer kræves og ingen kreditcheck kræves, 100% garanteret. Jeg vil bruge dette medium til at informere dig om, at vi yder pålidelig og støttemodtager hjælp, og vi vil være glade for at tilbyde dig et lån.
    Så send os en e-mail til: (victoriaemmanuelloan@gmail.com) for at ansøge nu om et lån.

    ReplyDelete
  9. Kære lånesøgere

    Har du økonomiske vanskeligheder? Vil du starte din egen virksomhed? Dette lånefirma blev etableret menneskerettighedsorganisationer rundt omkring i verden med det ene formål at hjælpe de fattige og mennesker med økonomiske vanskeligheder i livet. Hvis du ønsker at ansøge om lån, skal du kontakte os igen med nedenstående email: elenanino0007@gmail.com

    Navn:
    Det krævede lånebeløb:
    Lånetid:
    Mobilnummer:

    Tak og Gud velsigne
    TILLID
    Elena

    ReplyDelete
  10. Opmærksomhed,

    Ser du alvorligt efter et lån til at oprette en virksomhed eller betale dine regninger? Har du været skruet ned af banken eller andre långivere? Vær ikke mere bekymret for, at vi er her for at give dig det, du har set uden forsinkelse eller problemer, kontakt os venligst via email nedenfor for mere information i dag;

    Email: easyloanfirm2020@gmail.com

    Hilsen
    Derek Douglas
    easyloanfirm2020@gmail.com





    3% tilgængelig lånetilbud

    ReplyDelete
  11. Opmærksomhed,

    Ser du alvorligt efter et lån til at oprette en virksomhed eller betale dine regninger? Har du været skruet ned af banken eller andre långivere? Vær ikke mere bekymret for, at vi er her for at give dig det, du har set uden forsinkelse eller problemer, kontakt os venligst via email nedenfor for mere information i dag;

    Email: easyloanfirm2020@gmail.com

    Hilsen
    Derek Douglas
    easyloanfirm2020@gmail.com





    3% tilgængelig lånetilbud

    ReplyDelete
  12. Kære lånesøgere

    Du i nogen økonomiske vanskeligheder? Vil du starte din egen virksomhed? Dette lånefirma blev etableret menneskerettighedsorganisationer rundt omkring i verden med det ene formål at hjælpe de fattige og mennesker med økonomiske vanskeligheder i livet. Hvis du ønsker at ansøge om lån, skal du kontakte os igen med nedenstående email: elenanino0007@gmail.com

    Navn:
    Det krævede lånebeløb:
    Lånetid:
    Mobilnummer:

    Tak og Gud velsigne
    TILLID
    Elena

    ReplyDelete
  13. Har du brug for midler til at etablere din egen virksomhed Jeg hedder Shamla Biba, jeg er en privat långiver, der giver lån til privatpersoner og virksomheder. Nægtes så mange banker? Har du brug for finansiering til at etablere din virksomhed? har du brug for finansiering til at udvide din virksomhed? Har du brug for et personligt lån? kdfin11@gmail.com

    ReplyDelete
  14. Til dem der falder over artiklen: De har ændret api'et (ved dog ikke hvornår). Jeg har fiflet mig lidt frem til forskellige ting og leget stadig med det. Men i bund og grund har jeg extracted en masse endpoints ved at decompile deres android app, og fundet frem til at man kan bruge deres api med base url: string baseAPI = "https://api.dba.dk/";

    Dertil skal der sættes en DbaApiKey i headeren, frem for en User-Agent:

    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);

    myReq.Headers["DbaApiKey"] = "64424762-f650-450f-909d-08d6d22703fd";

    Bemærk at dette er .NET

    Derfra kan man søge efter hvad man vil med denne:

    string url = baseAPI + "api/v2/taxonomy/search?q="+searchQuery+"&format=json";

    Hvor searchQuery er den string man søger efter. Så lister den alle de sections der er, samt hvor mange hits den har fundet på den pågældende string i hver section. Jeg har ikke lige segmentereret mere i det, men jeg leger videre med det :)

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. This comment has been removed by the author.

      Delete
    3. Solved my problem via this header:
      "response = requests.get(url,headers={"DbaApiKey":"93d8cbae-ae89-47bb-a423-08d646555519","User-Agent":"dba/5.9 iPhone 12.1"},)"

      Delete
  15. @GET("api/v2/app/configuration")
    Observable getAppConfigurationRequest();

    @GET("api/v2/search/blog/section/{SectionId}")
    Observable getBlogContentBySectionRequest(@Path("SectionId") Integer num);

    @GET("api/v2/user")
    Observable getCurrentUserRequest();

    @GET("api/v2/social/followees")
    Observable getFolloweesRequest();

    @GET("api/v2/common/geocode")
    Observable getGeocodeRequest(@Query("Address") String str, @Query("ZipCode") String str2, @Query("City") String str3, @Query("Country") String str4);

    @GET("api/v2/tracking/global")
    Observable getGlobalTrackingRequest();

    @GET("api/v2/search/latest/category/{CategoryId}")
    Observable getLatestSearchesRequest(@Path("CategoryId") Integer num);

    @GET("api/v2/ads/{ExternalId}")
    Observable getListingByExternalIdRequest(@Path("ExternalId") String str);

    @GET("api/v2/messagecenter/items")
    Observable getMessageCenterItemsRequest();

    @GET("api/v2/messagecenter/state")
    Observable getMessageCenterStateRequest();

    @GET("api/v2/taxonomy/predict")
    Observable getPredictiveTaxonomyRequest(@Query("Query") String str, @Query("SectionId") Integer num, @Query("CategoryId") Integer num2);

    @GET("api/v2/user/profile")
    Observable getProfileRequest();

    @GET("api/v2/notifications/resolve-location")
    Observable getResolveLocationRequest(@Query("Data") String str);

    @GET("resources")
    Observable> getResources(@Query("apiKey") String str);

    @GET("api/v2/listing/{ExternalId}/secondaryinfo")
    Observable getSecondaryListingInfoRequest(@Path("ExternalId") String str, @Query("VipType") String str2);

    @GET("api/v2/soi/{SellerId}")
    Observable getSellersOtherItemsRequest(@Path("SellerId") String str, @Query("ownerType") Integer num, @Query("page") Integer num2, @Query("pageSize") Integer num3);

    @GET("api/v2/soi/profile/{SellerId}")
    Observable getSellersProfileRequest(@Path("SellerId") String str, @Query("ownerType") String str2);

    @GET("api/v2/users")
    Observable getStartCreateUserRequest();

    @GET("api/v2/listing/{ExternalId}/complain")
    Observable getStartListingComplaintRequest(@Path("ExternalId") String str);

    @GET("api/v2/common/startup-message")
    Observable getStartupMessageRequest();

    @GET("api/v2/syi/externalid/{ExternalId}/allowedlistingactions")
    Observable getSyiAllowedListingActionsRequest(@Path("ExternalId") Integer num, @Query("VipType") String str);

    @GET("api/v2/syi/externalid/{ExternalId}")
    Observable getSyiStateByExternalIdRequest(@Path("ExternalId") Integer num);

    @GET("api/v2/syi/syiid/{SyiId}")
    Observable getSyiStateRequest(@Path("SyiId") String str);

    @GET("api/v2/taxonomy")
    Observable> getTaxonomyRequest();

    @GET("api/v2/taxonomy/search")
    Observable> getTaxonomySearchRequest(@Query("q") String str);

    ReplyDelete
  16. Jeg får 403: forbidden, når jeg kører på kategori.
    Min header er:
    "{'User-Agent': 'dba/5.9 iPhone 12.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'DbaApiKey': '93d8cbae-ae89-47bb-a423-08d646555519'}
    "

    Jeg requester med "
    baseAPI = "https://api.dba.dk"
    CategoryId = str(36020)
    url = baseAPI + "/api/v2/search/latest/category/" + CategoryId
    "

    Har du et bud på at omgå 403?

    ReplyDelete
  17. Jeg er Saara Kemi, der er en privatlånsudlåner, der yder en anden type lån til enkeltpersoner / virksomheder over hele kloden universet med en hastighed på 3%, hvis interesseret venligst kontakt mig via e-mail: saara.kemi@gmail.com

    ReplyDelete
  18. Kære låneansøgere

    Er du i økonomiske vanskeligheder? Vil du starte din egen virksomhed? Dette lånefirma blev etableret menneskerettighedsorganisationer over hele verden med det eneste formål at hjælpe de fattige og mennesker med økonomiske vanskeligheder i livet. Hvis du ønsker at ansøge om et lån, så kom tilbage til os med nedenstående e-mail-adresse: elenanino0007@gmail.com

    Navn:
    Påkrævet lånebeløb:
    Lånetid:
    Mobilnummer:

    Tak og Gud velsigne
    TILLID
    Elena

    ReplyDelete