niedziela, stycznia 18, 2015

Monitorujemy cenę IntelliJ'a ;-)

Używam w pracy IntelliJ, którego darzę silnym uczuciem.
Tak silnym, że w domu też używam IntelliJ'a, ale w wersji Community, która nie jest aż tak fajna jak wersja pełna.

Chciałbym kupić licencję IntelliJ'a, ale z racji wydatków mieszkaniowych obecne 207 euro wydaje się być chwilowo trochę zbyt duże...

Dlatego poluję na promocję, a do polowania na promocję (jeśli się zdarzy) dobrze użyć automatu ;-)

Tutaj takowy w node.js:

var http = require("https");
var nodemailer = require("nodemailer");
var fs = require("fs");

var TO_EMAIL = <your recipent address>;
var FROM_EMAIL = <your sender address>;
var PASS = <your server password>;

var url = "https://www.jetbrains.com/idea/buy/";

function sendEmailWithPrice(newPrice, oldPrice) {
console.log("Sending e-mail about new price "+newPrice);
if (oldPrice) console.log(oldPrice);
var transport = nodemailer.createTransport({
service : "Gmail",
auth : {
user : FROM_EMAIL,
pass : PASS
}
});
var mailOptions = {
from : FROM_EMAIL,
to : TO_EMAIL,
subject : "New price for IntelliJ "+newPrice,
text : "New price for IntelliJ is "+newPrice+(oldPrice?"\nOld price was "+oldPrice:"")
}
console.log(mailOptions);
transport.sendMail(mailOptions);
}

function gotPrice(price) {
var lastPrice;
try {
lastPrice = fs.readFileSync("price.dat");
} catch (e) {
console.log(e);
}
if (price!=lastPrice) {
console.log("Will send e-mail");
sendEmailWithPrice(price, lastPrice);
fs.writeFileSync("price.dat", ""+price);
}
}

http.get(url, function(response) {
var body = "";
response.on("data", function(chunk) {
body+=chunk;
});
response.on("end", function() {
var re = /\<script type=\"text\/javascript\"\>([^<]*)\<\/script\>/g; var tramsStops = [];
while ( res=re.exec(body) ) {
var str = res[1].trim();
if (str.indexOf("var links_json")!=-1) {
str = str.substring(str.indexOf("{"))
str = str.substring(0, str.indexOf("};")+1);
var obj = JSON.parse(str);
var personal = obj.PERSONAL.purchase;
for (var p in personal) {
var price = personal[p].new.regular.price;
console.log(price);
gotPrice(price);
break;
}
break;
}
}
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});

Biega sobie teraz na moim Raspberry Pi i obserwuje serwer... pewnie szybciej w nim jakiś błąd poleci (bo ich w ogóle nie obsługuję ;-)) niż cena spadnie, ale zawsze można mieć nadzieję ;-)



Podobne postybeta
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Umiejętność programowania pomaga :-)
ToDo od Trello jako "oddzielna aplikacja"
Robimy krzywdę GWT ;-) czyli przekazujemy wartość z serwera do klienta, bez RPC ;-)
"Kodowanie" na Chrome OS ;-)