Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher
а где в measuresConverter.js беларуский рубль? :?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

se7h
А у гугла он где?
Смотрим на ISO 4217, видим, что «BYR», но ничего не получаем.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher wrote:se7h
А у гугла он где?
Смотрим на ISO 4217, видим, что «BYR», но ничего не получаем.


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

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

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

se7h wrote:а может использовать другой сервис ради братской Беларуси? :D
Можно. Найдете – приделаем. :)
У них еще и перевода на русский нет, а вот немецкий, например, есть.

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

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher
хороший обмен :D

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

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

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher
Image
NaN?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

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

Code: Select all

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

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher wrote:se7h
По ссылке http://exchange-rates.org/converter/BYR/USD/1/N в исходном коде есть

Code: Select all

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

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post 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.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post 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;
}
?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post 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-запросы. И вообще, асинхронный подход обычно лучше.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

P.S. Очень нужен аналог window.setTimeout().
Очень извиняюсь что пишу в слепую(ибо не могу обновить скрипт по причине ucoz), но Вы почти у цели.

Code: Select all

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

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post 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);
  }
}

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Infocatcher wrote:se7h
А если запустить вот такой скрипт?
этот работает и, как положено, попросился в сеть через NOD32 Smart Security
Locked