Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Разыскиваются знатоки в 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
Репутация
964
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 472
Репутация
2 401
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
Репутация
622
мож лучше
Код:
<?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
Репутация
132
Вот мой вариант
Код:
<?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
Репутация
622
Кстати, код 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
Репутация
132
Kaster сказал(а):
дефолтный юзер-агент прописанный в php.ini отклонялся оф.сайтом. Поэтому его надо было немного подправить.
На хостинге не получиться подправить дефолтный юзер-агент прописанный в php.ini. Поэтому надо маскироваться под AutoIt, что и делает мой скрипт.
 

kaster

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

XpycT

Скриптер
Сообщения
380
Репутация
132
Kaster сказал(а):
но разве его нельзя подменить на время сессии?
Это уже зависит от хостера, если он разрешит то подмениться, а если нет то нет.
 

kaster

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

CreatoR

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

kaster

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

CreatoR

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

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

CreatoR

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

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

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

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Если это мод для форума (как я понял) то можно писать в 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 472
Репутация
2 401
Garrett [?]
Если это мод для форума (как я понял) то можно писать в MySQL
Ну это не совсем мод, я просто хочу улучшить скрипт для автопроверки новой версии.

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

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

XpycT

Скриптер
Сообщения
380
Репутация
132
CreatoR
Проверь пожалуста что покажет вот этот скрипт
Код:
<?
$check = array("connection" => $connection,
                        "db_connection" => $db_connection);
print('<pre>');
print_r($check);
print('</pre>');
>
Должен показать что то типо такого (Цифра может быть другая)
Код:
<?
Array
(
    [connection] => Resource id #3
    [db_connection] => 
)
?>
В переменных храниться подключение к базе данных.

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