Web → Конвертер валют для Ebay

Ebay

Не так давно зацікавився аукціоном Ebay. Він підкупив своєю продуманістю, зручністю, безпечністю й хорошими цінами.

Та помітив цікаву психологічну особливість, суми в доларах сприймаються меншими чим гривневі 🙂 Тому захотілось прикрутити конвертер.

Готовий скріпт Ebay Currency (Firefox JS).

Я користуюся Mozilla Firefox, все описане тільки для нього.

Ітак, вирішив написати користувацький JavaScript, для його виконання у Firefox є плагін Greasemonkey.

Ставимо, перезапускаємо, далі Tools → Greasemonkey → New User Scripts…

Greasemonkey New User Scripts...

Після ОК вибираємо текстовий редактор за замовчуванням, на свій смак, у мене Komodo Edit.

З самим скріптом трохи важче. Процедуру парсінгу і виводу значень підглянув з якогось готового скріпта, але у мене ще була задумка не використовувати постійний курс, а автоматично його оновлювати.

Для цього я намагався використати XMLHttpRequest, поки не згадав, що він не дозволяє робити кросдоменні запити. Та в Greasemonkey це передбачили, й створили GM_xmlhttpRequest.

// ==UserScript==
// @name			Ebay Currency
// @namespace	   Ebay_Currency
// @description	 Конвертер валюти для Ebay
// @include		 http://*.ebay.com/*
// ==/UserScript==

var timer
var kurs

function setCookie (name, value, expires, path, domain, secure) {
	document.cookie = name + "=" + escape(value) +
					((expires) ? "; expires=" + expires : "") +
					((path) ? "; path=" + path : "") +
					((domain) ? "; domain=" + domain : "") +
					((secure) ? "; secure" : "");
}

function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function setval(){
	if ( kurs == null ){
		timer = setTimeout(setval,100);
	} else {
		clearTimeout(timer)
		   
		textnodes = document.evaluate(
			"//text()",
			document,
			null,
			XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			null);
	   
		for (var i = 0; i < textnodes.snapshotLength; i++) {
			node = textnodes.snapshotItem(i);
			s = node.data;
		   
			if (s.match(/\$[\d,]+\.\d+/)) {
				var USD = s.replace(/([US ]*\$)([\d,]+\.\d+)(.*)/, '$2');
				var myCurrency = USD * kurs;
				if ( myCurrency )
					s = s.replace(/(.*\$)([\d,]+\.\d+)/, "$1$2 ₴"+ myCurrency.toFixed(2));
			}
		   
			node.data = s;
		}
	}
}

function getkurs() {

	kurs = getCookie('usd')
	if ( kurs == null ){
		GM_xmlhttpRequest({
			method: 'GET',
			url: 'http://otp.siteheart.com/valuti/vars.js',
			headers: {
				'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey'
			},
			onload: function(text) {
				usd = text.responseText
				reg = /widget_vars.courses_cash\["USD"\] = {"buy":"([0-9.]+)", "sell":"([0-9.]+)"};/
				usd = usd.match(reg)
				kurs = usd[2]
				setCookie ('usd', kurs, '', '*ebay.com')
			}
		});
	}
   
}
getkurs()
setval()

Функція setCookie і getCookie відповідно встановлює і читає значення кук (до речі, українською їх називають реп'яшки, доволі наглядно).

Алгоритм. При завантаження сторінки першим ділом перевіряються кукіси на предмет наявності там курсу валюти, якщо його немає — створюється запит курсу в Приватбанка й встановлюється кукіс з поточним значенням (дійсний на період сесії). Далі працює функція, що безпосередньо дописує гривневий еквівалент сум поряд із доларовим.

Виглядає так

Ebay суми в гривнях

Вдалих покупок 🙂

GM_xmlhttpRequest
02.12.2009 11:53 Автор: Strange_V Хіти: 722

Коментарів 2

Напишіть відгук