Что нового

Скрипт получения текущей версии AutoIt

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Разыскиваются знатоки в php, которые смогут наваять скрипт для автоматической проверки версии AutoIt.

Иммется ссылка для такой проверки: http://www.autoitscript.com/autoit3/files/beta/update.dat

нуже скрипт который будет доставать оттуда значение параметра «version», «index»/«setup», и записывать новость по шаблону:

Код:
<b>Последняя финальная версия AutoIt:</b> $version
<b>Последняя Beta версия AutoIt:</b> $beta_version //это должно записываться условно, если версия беты больше чем версия финала
<a href="$download_url">Скачать</a>  //тут доставть значение у ключа «index» или «setup»

Я правда пока не знаю как буду прикручивать это :whistle:, в идеале конечно хотелось бы прямо в новостной движок.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Я уже анализировал этот вопрос, сложного здесь нет ничего :smile: Сложность в том, что, при обращение из скрипта к файлу получаем 403 Forbidden не знаю, может это только с локального хоста, (что наварят ли).
Вот простой скрипт проверки модификации файла:
Код:
<?php
$url = 'http://www.autoitscript.com/autoit3/files/beta/update.dat';
print('<pre>');
print_r(get_headers($url, 1));
/* print(get_headers($url['Last-Modified'], 1)); // последняя модификация файла */
print('</pre>');
?>
Можно попробовать загрузить на хостинг, этот скрипт и вызвав, (_http://autoit-script.ru/update.php) посмотреть, что выдаст сервер в ответ. Если он отдаст примерно такое:
Код:
Array

(

    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html

)
тогда, можно будет, работать дальше :smile:
Пока он мне выдал:
Код:
Array

(
    [0] => HTTP/1.1 403 Forbidden
    ...
)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Garrett [?]
Можно попробовать загрузить на хостинг
Тоже запрещено:

Код:
Array
(
    [0] => HTTP/1.1 403 Forbidden
    [Date] => Wed, 21 Apr 2010 05:46:27 GMT
    [Server] => Apache
    [X-Powered-By] => PHP/5.2.11
    [Vary] => User-Agent,Accept-Encoding
    [Content-Length] => 206
    [Content-Type] => text/html
)

Странно что AutoIt-скрипт получает доступ без проблем :smile:


сложного здесь нет ничего
Как выясняется - есть ;)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
мож лучше
Код:
<?php
$url = 'http://www.autoitscript.com/autoit3/files/beta/update.dat';
ini_set('user_agent', 'Firefox');
$content = file_get_contents($url);
$aContent = preg_split('/[\r\n]+/', $content);

$aAutVersion = split('=', $aContent[1]);
$aAutSetup = split('=', $aContent[3]);
$aBetaVersion = split('=', $aContent[7]);
$aBetaSetup = split('=', $aContent[9]);

$sAutversion = $aAutVersion[1];
$sAutSetup = $aAutSetup[1];
$sBetaVersion = $aBetaVersion[1];
$sBetaSetup = $aBetaSetup[1];

print("<b>Последняя финальная версия AutoIt: </b>".$sAutversion."\n");
print("<b>Последняя Beta версия AutoIt: </b>".$sBetaVersion."\n");
print("<a href=\"".$sAutSetup."\">Скачать</a>\n");
?>
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Вот мой вариант
Код:
<?php
$curl_options = array(
    CURLOPT_URL=>"http://www.autoitscript.com/autoit3/files/beta/update.dat",
    CURLOPT_HEADER=>true,
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_USERAGENT=>"AutoIt" // Маскируемся под AutoIt
);

$curl_handle = curl_init();
curl_setopt_array($curl_handle, $curl_options);

$server_output = curl_exec($curl_handle);
curl_close($curl_handle);

preg_match('/\[AutoIt\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $final);
preg_match('/\[AutoItBeta\]\r\nversion=(?P<version>[\d\.]+)\r\n.*\r\nsetup=(?P<download_url>[\w:\/\.\-\?]+)/', $server_output, $beta);

echo("<b>Последняя финальная версия AutoIt:</b> " . $final['version'] . "
");
if($final['version'] > $beta['version']) {
	echo("
<a href=\"" . $final['download_url'] . "\">Скачать</a>"); }
else {
	echo("<b>Последняя Beta версия AutoIt:</b> " . $beta['version'] . "
");
	echo("
<a href=\"" . $beta['download_url'] . "\">Скачать</a>");
};
?>
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Кстати, код Garrett не работал, потому что дефолтный юзер-агент прописанный в php.ini отклонялся оф.сайтом. Поэтому его надо было немного подправить. После этого сервер вернул нормальный ответ
Код:
<pre>Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Wed, 21 Apr 2010 10:12:18 GMT
    [Server] => Apache
    [Last-Modified] => Fri, 16 Apr 2010 15:07:07 GMT
    [ETag] => "141194ad-1bd-4845bf6f7936f"
    [Accept-Ranges] => bytes
    [Content-Length] => 445
    [Connection] => close
    [Content-Type] => text/plain
)
</pre>
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Kaster сказал(а):
дефолтный юзер-агент прописанный в php.ini отклонялся оф.сайтом. Поэтому его надо было немного подправить.

На хостинге не получиться подправить дефолтный юзер-агент прописанный в php.ini. Поэтому надо маскироваться под AutoIt, что и делает мой скрипт.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
XpycT [?]
На хостинге не получиться подправить дефолтный юзер-агент прописанный в php.ini
да. но разве его нельзя подменить на время сессии?
Код:
ini_set('user_agent', 'Firefox');
подправил код в посте 3
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Kaster сказал(а):
но разве его нельзя подменить на время сессии?

Это уже зависит от хостера, если он разрешит то подмениться, а если нет то нет.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Супер, беру вариант от XpycT, он более корректен по моему и удобен в исползований.
Уже встроен в новостной агрегат, но пришлось (временно?) пожертвовать функцией показа новостей на главной форума, т.к туда мне добраться пока не удалось.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR
а ты не мог бы проверить на работоспособность и мой скрипт? Чисто из спортивного интереса - работает ли подмена user_agent на время сессии посредством set_ini()
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Kaster [?]
ты не мог бы проверить на работоспособность и мой скрипт?
Я конечно же сразу проверил...

Чисто из спортивного интереса - работает ли подмена user_agent на время сессии посредством set_ini()
Да, попробуй сам :smile: (я только заменил \n на
).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Хочу добавить в скрипт возможность отображения сообщения пользователю при обнаружении новой версии, вот только как это сделать?

Все что приходит на ум, так это отображать alert используя JavaScript, и записывать некое значение (например версию аутоита) в куки браузера, чтобы сообщение не отображалось дважды.

Есть у кого идеи как реализовать это?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Если это мод для форума (как я понял) то можно писать в MySQL.
Мысль следующая.
Добавить в таблицу members ячейки autoit_ver и флаг msg.
Однако создать свою таблицу было бы лучше. Например db_prefix_autoit, с ячейками id, user_id, msg, version.
Далее, читаем дату модификации файла update.txt на офф. сайте. Если дата изменилась, читает из файла версию Autoit`a, сравнивает её со значением в ячейке version в таблице db_prefix_autoit и в случае несовпадения, меняет всем пользователям на новое значение. Попутно меняет и флаг msg, с 1 на 0.
Когда пользователь заходит на форум, скрипт распознаёт его по user_id. Смотрит, если флаг msg равен 0 то, пользователь получает уведомление о новой версии, и смену флага msg на 1.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Garrett [?]
Если это мод для форума (как я понял) то можно писать в MySQL
Ну это не совсем мод, я просто хочу улучшить скрипт для автопроверки новой версии.

Мысль следующая
Мысль понравилась, а как теперь это реализовать?

P.S
Есть ещё мысль - чтобы не заморачиваться с сохранением значении об уведомлении, можно просто всем юзерам высылать письмо (или ЛС) с информацией об обновлении при достурности такового.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
Проверь пожалуста что покажет вот этот скрипт
Код:
<?
$check = array("connection" => $connection,
                        "db_connection" => $db_connection);
print('<pre>');
print_r($check);
print('</pre>');
>

Должен показать что то типо такого (Цифра может быть другая)
Код:
<?
Array
(
    [connection] => Resource id #3
    [db_connection] => 
)
?>

В переменных храниться подключение к базе данных.

Просто не хочется еще раз указывать в скрипте Адрес, Логин, Пароль и Имя базы данных, а использовать уже существующие.
 
Верх