Last active
March 29, 2019 11:25
-
-
Save kerphi/5124367 to your computer and use it in GitHub Desktop.
Script permettant de télécharger en ligne de commande une facture internet free (freebox) via du screen scraping
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
// | |
// Script permettant de télécharger en ligne de commande une facture internet free (freebox) via du screen scraping | |
// Dépendances : npm install request http-get jsdom jquery optimist | |
// | |
var fs = require('fs'); | |
var u = require('url'); | |
var request = require('request'); | |
var http = require('http-get'); | |
var jsdom = require('jsdom'); | |
var jquery = require('jquery'); | |
var optimist = require('optimist') | |
.usage('Récupération de facture free.fr\nUsage: $0 --login="0359248140" --pass="el43kd87" --date="Février 2013" --file="1302_internet_chucknoris.pdf"') | |
.demand('date').string('login') | |
.demand('file').alias('file', 'f').default('file', 'facture.pdf').string('login') | |
.demand('login').alias('login', 'l').string('login') | |
.demand('pass').alias('pass', 'p').string('login') | |
.describe('date', 'Date de la facture à récupérer') | |
.describe('file', 'Nom du fichier où sauvegarder la facture') | |
.describe('login', 'Identifiant free') | |
.describe('pass', 'Mot de passe free'); | |
var argv = optimist.argv; | |
// show usage if --help option is used | |
if (argv.help) { | |
optimist.showHelp(); | |
process.exit(0); | |
} | |
// cookies | |
var j = request.jar(); | |
var request = request.defaults({jar:j}); | |
var url = 'https://subscribe.free.fr/login/login.pl'; | |
request.post(url, | |
{ | |
form: { | |
login: argv.login, | |
pass: argv.pass, | |
ok: '' | |
} | |
}, | |
function (error, response, body) { | |
assertError(error, 'Login error ' + response.statusCode); | |
if (response.statusCode != 302) { | |
process.stderr.write('Erreur de redirection après formulaire de connexion'); | |
process.exit(1); | |
} | |
url = response.headers.location; | |
console.log('Téléchargement de ' + url); | |
var url_query = u.parse(url, true).query; | |
request.get(url, function (error, response, body) { | |
assertError(error, 'Erreur du chargement de la page après connexion (mauvais login ou mdp)'); | |
url = 'https://adsl.free.fr/liste-factures.pl?id=' + url_query.id + '&idt=' + url_query.idt; | |
console.log('Téléchargement de ' + url); | |
request.get(url, function (error, response, body) { | |
assertError(error, 'Invoice list error'); | |
jsdom.env({ html: body }, function (err, window) { | |
var $ = jquery.create(window); | |
// url du pdf de la facture | |
url = $('.mesfactures strong:contains("' + argv.date + '")').parent().parent().find('.btn_download').attr('href'); | |
url = 'https://adsl.free.fr/' + url; | |
console.log('Téléchargement de ' + url); | |
var options = { url: url }; | |
http.get(options, argv.file, function (error, result) { | |
if (error) { | |
console.error(error); | |
} else { | |
console.log('Facture free téléchargée ici : ' + result.file); | |
} | |
}); | |
}); | |
}); | |
}); | |
} | |
); | |
function assertError(error, msg) { | |
if (error) { | |
process.stderr.write(msg + ' [' + error + ']'); | |
process.stderr.write('\n'); | |
process.exit(1); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment