2016-02-01 1 views
1

J'essaie de créer un Web Scraper en utilisant Import.io. J'ai les questions suivantes,Demander une API authentifiée

1) Existe-t-il un moyen d'obtenir des données d'une API authentifiée sans connaître ses informations de connexion?

2) Est-il possible d'obtenir des données d'une page Web protégée par mot de passe sans s'y connecter?

Je veux fondamentalement extraire des données de plusieurs pages sans qu'il me demande de me connecter à chaque fois.

Par exemple, import.io n'obtiendra pas les données de cette page - https://github.com/settings/emails car elle nécessite une authentification. Y a-t-il un moyen de surpasser cela?

+0

J'ai modifié ma question. S'il vous plaît, jetez un oeil. –

+0

Alors avez-vous les informations d'identification ou non? 1) ressemble à ce que vous n'avez pas mais 2) ressemble à vous mais sont trop paresseux pour attendre la page de se connecter ...? –

+0

J'ai les informations d'identification. C'est une tâche fastidieuse pour se connecter si j'essaye de l'automatiser. –

Répondre

0

Oui, vous pouvez le faire. Vous devez utiliser la méthode de requête de connexion (http://api.docs.import.io/#QueryMethods).

Quelque chose comme;

var credentials = { 
    username: 'bunnyman', 
    password: '*******' 
}; 

// Stuff the cookie into a global (for now) 
var cookie; 

request.post({ 
     uri: the_uri_of_the_login_api, 
     headers: { 'content-type': 'application/json' }, 
     json: credentials 
    }, function(err, res, body){ 
     if(err) { 
      console.log("error", body); 
     } else { 
      cookie = body; 
     } 
    }); 

Cela donnera le cookie de retour. Ensuite, vous pouvez utiliser l'appel _query (en passant dans le cookie que vous avez obtenu de retour) comme:

var query = { 
    "input": { "some_form_property": "value" }, 
    "additionalInput": { 
     "8d817939-your-api-key-f5dc9502ed72": cookie 
    }, 
    "returnPaginationSuggestions": true 
} 
request.post({ 
    uri: the_uri_of_the_query_api, 
    headers: { 'content-type': 'application/json' }, 
    json: query 
}, function (error, response, payload){ 
    if (error){ 
     console.log(payload); 
    } else { 
     console.log(payload); 
    } 
}); 

espoir qui aide .. si vous figurez sur la pagination, laissez-moi savoir :)