API (non officielle) AVITO


Le 27 septembre 2013, j’ai participé, aux côtés d’un collègue, à un concours portant sur le développement d’une application Android. Notre projet consistait à concevoir une application capable d’effectuer simultanément des recherches sur les plateformes Avito et Bikhire au moyen d’un crawler, celles-ci ne disposant pas d’API publique.

Notre initiative a été récompensée par une deuxième place, résultat que nous avons considéré comme particulièrement encourageant. Par la suite, les deux plateformes ont fusionné sous une entité unique, Avito, ce qui a rendu notre application obsolète. Toutefois, cet élément contextuel n’est pas l’objet principal de cette présentation.

En effet, je me propose ici d’aborder l’étude de l’API non officielle d’Avito. Afin de l’identifier et d’en analyser le fonctionnement, j’ai procédé au téléchargement de l’application mobile Avito, puis à l’inspection des requêtes réseau à l’aide de l’outil Fiddler. Les résultats obtenus sont présentés ci-après.

  1. Lien permettant d’accéder à la liste des villes associées à leurs régions respectives :
    http://www.avito.ma/templates/api/confregions.js?v=3

Résultat : 
 { "regions": [  
{
"id" : "1",
"name" : "Khouribga"
},
{
"id" : "2",
"name" : "Safi"
,
"cities" : [
{
"id" : "2",
"name" : "Lalla Hnia Hamria"
},
{
"id" : "162",
"name" : "Ville Nouvelle"
},
{
"id" : "163",
"name" : "Autre secteur"
}
]
},
.................

  1. Lien permettant d’accéder à la liste des catégories ainsi qu’aux sous-catégories correspondantes :
    http://www.avito.ma/templates/api/confcategories.js?v=3

Résultat : 
 {  
"categories": [
{
"id" : 5000,
"level" : 0,
"parent" : null,
"name" : "INFORMATIQUE ET MULTIMEDIA",
"ad_types" : "s,k"
},
{
"id" : 5010,
"level" : 1,
"parent" : 5000,
"name" : "Téléphones",
"ad_types" : "s,k"
},
.................

  1. Lien permettant d’accéder aux dernières publications, toutes catégories confondues :
    http://www.avito.ma/lij?fullad=1&w=105&ca=5_s&cg=0&st=s

Résultat : 
 {  
"ads_per_page" : 20,
"extracted_ads" : 20,
"total_ads" : 267032,
"list_ads" : [
{
"id" : 5113563,
"ad_date" : "Aujourd'hui, 23:38",
"subject" : "Montre Guess Collection SPORT X76004G2S",
"thumb" : "http://content.avito.ma/thumbs/70/7063966465.jpg",
"price" : "2.300",
"category" : "3160",
"city" : "",
"type" : "Offre",
"url" : "http://www.beta.avito.ma/vij/5113563.htm",
"full_ad_data":{
"status" : "200",
"id" : "5113563",
"subject" : "Montre Guess Collection SPORT X76004G2S",
"name" : "Amine",
"date" : "2015-02-04 23:38:46",
"body" : "Montre Guess Collection SPORT CLASS XXl X76004G2S",
"region" : "Casablanca",
"city" : "",
"type" : "Offre",
"category" : "3160",
"company_ad" : "1",
"price" : {
"label" : "Prix",
"value" : "2 300 DH"
},
...........................

  1. Lien permettant d’effectuer une recherche du mot-clé « iphone » dans la ville de « Rabat », au sein de la catégorie « Informatique » :
    http://www.avito.ma/lij?fullad=1&q=iphone&w=112&ca=12_s&cg=5000&st=s

  • q : paramètre correspondant au mot-clé recherché.

  • ca : identifiant numérique de la ville (cf. requête n°1).

  • cg : identifiant numérique de la catégorie (cf. requête n°2).

Résultat :
 {  
"ads_per_page" : 20,
"extracted_ads" : 20,
"total_ads" : 1060,
"list_ads" : [
{
"id" : 5112288,
"ad_date" : "Hier, 22:01",
"subject" : "Iphone 5s 16GB libre officiel GOLD",
"thumb" : "http://content.avito.ma/thumbs/70/7099136243.jpg",
"price" : "4.000",
"category" : "5010",
"city" : "",
"type" : "Offre",
"url" : "http://www.beta.avito.ma/vij/5112288.htm",
"full_ad_data":{
"status" : "200",
"id" : "5112288",
"subject" : "Iphone 5s 16GB libre officiel GOLD",
"name" : "mounir",
"date" : "2015-02-04 22:01:48",
"body" : "je met en vente iphone 5s presque neuf en tres bon etat dans sa boite avec touts les accessoires d’origine, chargeurs, écouteurs phones, cable USB, chargeurs tous originales et dans la boite, aucune rayure:<br> 2 mois d'utilisations",
"region" : "Tanger",
"city" : "",
"type" : "Offre",
"category" : "5010",
"company_ad" : "0",
"price" : {
"label" : "Prix",
"value" : "4 000 DH"
},
...........................

J’espère que ces éléments d’information vous seront utiles et contribueront à une meilleure compréhension du fonctionnement de cette API non officielle.




Liens utiles :

 

Commentaires

  1. Merci Saad pour l'article, sinon j'aurai une question a te poser, on fait comment pour la pagination des resultats de recherche retourné ?

    RépondreSupprimer
    Réponses
    1. you can use "o" query string param.
      for example, to fetch page #2:
      http://www.avito.ma/lij?o=2

      to get an idea of all available params. please take a look at buildRequest (line 197) method here https://gist.github.com/anonymous/1822920de610551253ae21ec4e78b779

      Supprimer
  2. Hey Adil ,

    iam having some trouble don't know if you can help me but the thing is im trying to replicate the things you did (fiddler to get a look on how the application/api works)
    Now ive set fiddler with my phone (android) everything looks ok it gets data when i try to access a normal website but when i try to access Avito/jumia app it sais (Aucune connexion ) and the error from fiddler is a services.avito.ma:443 error and it works just fine without a "proxy" is there a way to bypass the error thank you

    RépondreSupprimer
    Réponses
    1. update: well after doing my homework i found out that the problem is caused by a certificate pining security measurement ill try to bypass it and keep you updated for the ones that are having the same problem :)

      Supprimer

Enregistrer un commentaire