Page 72 of 97

Posted: Sun Apr 10, 2011 10:58 am
by se7h
Infocatcher
а где в measuresConverter.js беларуский рубль? :?

Posted: Sun Apr 10, 2011 11:19 am
by Infocatcher
se7h
А у гугла он где?
Смотрим на ISO 4217, видим, что «BYR», но ничего не получаем.

Posted: Sun Apr 10, 2011 1:09 pm
by se7h
Infocatcher wrote:se7h
А у гугла он где?
Смотрим на ISO 4217, видим, что «BYR», но ничего не получаем.


а может использовать другой сервис ради братской Беларуси? :D

сообщил об этом на AdWords API Forum, надеюсь они одумаются

Posted: Sun Apr 10, 2011 3:04 pm
by Infocatcher
se7h wrote:а может использовать другой сервис ради братской Беларуси? :D
Можно. Найдете – приделаем. :)
У них еще и перевода на русский нет, а вот немецкий, например, есть.

[Добавлено позже]
Вот какой-то: http://ru.exchange-rates.org/converter/BYR/USD/1/Y, но удобного API я что-то не вижу.
Зато список побольше и перевод на русский есть. :)

Posted: Sun Apr 10, 2011 6:03 pm
by se7h
Infocatcher
хороший обмен :D

Posted: Sun Apr 10, 2011 6:14 pm
by Infocatcher
Попробовал сделать: measuresConverter-test.js
Работает, но обновляется теперь очень долго (примерно минуту по Ctrl+F5) – мало того, что валют больше, так еще и целую страницу надо грузить.
Плюс аргумент -sortByCode и перевод на русский. :)

Posted: Sun Apr 10, 2011 7:04 pm
by se7h
Infocatcher
Image
NaN?

Posted: Sun Apr 10, 2011 7:12 pm
by Infocatcher
se7h
Почему-то не удалось получить данные.
Или скрипт не пускают в сеть, или скачивается что-то не то. Или просто не грузится. :)
По ссылке http://exchange-rates.org/converter/BYR/USD/1/N в исходном коде есть

Code: Select all

<span id="ctl00_M_lblToAmount">число</span>
?

Posted: Sun Apr 10, 2011 7:41 pm
by se7h
Infocatcher wrote:se7h
По ссылке http://exchange-rates.org/converter/BYR/USD/1/N в исходном коде есть

Code: Select all

<span id="ctl00_M_lblToAmount">число</span>
?
есть

Posted: Sun Apr 10, 2011 8:14 pm
by KDJ
Infocatcher
In measuresConverter.js you can make extra buttons to:
- currency sorting by name/code,
- update/force update exchange rate.
And the message "Wait for download data" while update.

Posted: Sun Apr 10, 2011 8:22 pm
by Infocatcher
se7h
А если запустить

Code: Select all

var code = "BYR";
var messages = [];
var url = getRequestURL(code);
messages.push("URL: " + url);
try {
	var request = new ActiveXObject("Microsoft.XMLHTTP");
	request.open("GET", url, false);
	request.send(null);
	var ratio = getRatioFromResponse(request.responseText);
	if(!isNaN(ratio))
		messages.push("Ratio for " + code + ": " + ratio);
	else
		messages.push("Can't get ratio");
}
catch(e) {
	messages.push("Error: " + e.message);
}
WScript.Echo(messages.join("\n"));

function getRequestURL(code) {
	if(code == "SKK") // Example: http://www.google.com/ig/calculator?hl=en&q=100EUR%3D%3FAUD
		return "http://www.google.com/ig/calculator?hl=en&q=" + encodeURIComponent(1 + code + "=?USD");
	// Example: http://exchange-rates.org/converter/BYR/USD/1/Y
	return "http://exchange-rates.org/converter/" + code + "/USD/1/N";
}
function getRatioFromResponse(response) {
	//WScript.Echo("Response:\n" + response);
	// http://exchange-rates.org/converter/BYR/USD/1/N
	// <span id="ctl00_M_lblToAmount">0.0003295</span>
	if(/<span id="ctl00_M_lblToAmount">([^<>]+)<\/span>/.test(response)) {
		messages.push("getRatioFromResponse: exchange-rates.org -> [" + RegExp.$1 + "]");
		return Number(RegExp.$1.replace(/\s+/g, "").replace(/,/g, ""));
	}

	// http://www.google.com/ig/calculator?hl=en&q=100EUR%3D%3FAUD
	// {lhs: "100 Euros",rhs: "135.069786 Australian dollars",error: "",icc: true}
	// We don't have native JSON support :(
	// And Google can return numbers in exponential format:
	//   1.35069786 \x26#215; 10\x3csup\x3e-6\x3c/sup\x3e
	//   => 1.35069786 × 10<sup>-6</sup> => 1.35069786 × 10<sup>-6</sup>
	// Or add spaces: 135 069.786
	if(/[{,]\s*rhs:\s*"([\d\s]+(\.\d+)?)\s+[^"]+"\s*[,}]/.test(response)) {
		messages.push("getRatioFromResponse: google.com -> [" + RegExp.$1 + "]");
		return Number(RegExp.$1.replace(/\s+/g, "")); // Only 1.35069786 and 135 069.786 supported
	}

	return NaN;
}
?

Posted: Sun Apr 10, 2011 11:17 pm
by Infocatcher
KDJ
make extra buttons to:
- currency sorting by name/code,
- update/force update exchange rate.

Image
, but Russian «Сортировать по имени» is too long for free space under OK/Convert/Cancel. :D
And the message "Wait for download data" while update.
Standard messages block code execution, now I just disable «Update» button.
And now asynchronous variant of update hangs sometimes. :? (Or server blocks frequent requests :)).


P.S. Очень нужен аналог window.setTimeout().
Во-первых, можно сделать какую-нибудь анимацию (например, выполнение порциями и с отображением прогресса). А во-вторых, можно ограничить по времени AJAX-запросы. И вообще, асинхронный подход обычно лучше.

Posted: Mon Apr 11, 2011 6:20 am
by FeyFre
P.S. Очень нужен аналог window.setTimeout().
Очень извиняюсь что пишу в слепую(ибо не могу обновить скрипт по причине ucoz), но Вы почти у цели.

Code: Select all

oSys.Call("user32::SetTimer",hwnd,timer_id,timeout,TimerProc)
Подробнее тут. И опять таки, не знаю как выполняется вызов воркера, и нужно ли принимать меры.

Posted: Mon Apr 11, 2011 6:29 am
by Instructor
Infocatcher wrote:P.S. Очень нужен аналог window.setTimeout().
Примерно так:

Code: Select all

//// Timer example

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var lpTimerProc;
var nTimerID=1;
var nTimerSysID;
var nStopAfter=3;

if (lpTimerProc=oSys.RegisterCallback("TimerProc"))
{
  if (nTimerSysID=oSys.Call("user32::SetTimer", 0, nTimerID, 1000, lpTimerProc))
  {
    AkelPad.WindowGetMessage();
    oSys.Call("user32::KillTimer", 0, nTimerSysID);
  }
  oSys.UnregisterCallback(lpTimerProc);
}

function TimerProc(hWnd, uMsg, idEvent, dwTime)
{
  oSys.Call("user32::SetWindowText" + _TCHAR, hMainWnd, "" + dwTime);

  if (--nStopAfter <= 0)
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
}

Posted: Mon Apr 11, 2011 8:29 am
by se7h
Infocatcher wrote:se7h
А если запустить вот такой скрипт?
этот работает и, как положено, попросился в сеть через NOD32 Smart Security