PDA

Просмотр полной версии : Как в 1С 8.2 программно скачивать данные с сайта



Максимио
12.03.2014, 22:01
Доброго всем времени суток!

Собственно вот в чём заключается моя проблема:

есть некий скрипт, который получает данные с других сайтов. В нём есть вот такой кусок кода, который получает некоторую информацию по авто запчастям:


$data = array();
$i = 1000;
$id = "123";
$psw = "321";
$sc = "881";

$xml_data = '<?xml version="1.0" encoding="UTF-8" ?> <message><param><action>price</action><login>' . $id . '</login><password>' . $psw . '</password><code>' . $sc . '</code><sm>1</sm></param></message>';

$url = "http://adeo.pro/pricedetals2.php";

$xml = new SimpleXMLElement(trim($this->get_by_curl($url, $xml_data)));

В переменную "$xml" (насколько я понял) попадают данные с сайта.

Копаясь в 1С и в и-нете нашёл небольшой пример кода для работы с httpСоединением. Попытался реализовать его в 1С:


xml_data = "<?xml version=""1.0"" encoding=""UTF-8"" ?> <message><param><action>price</action><login>tula71</login><password>SetTtT</password><code>" + КодДетали + "</code><sm>1</sm></param></message>'";
url = "http://adeo.pro/pricedetals2.php";

Попытка
HTTP = Новый HTTPСоединение("adeo.pro");
HTTP.Получить("new SimpleXMLElement(trim($this->get_by_curl(" + url + ", " + xml_data + ")))", "C:\Users\Admin1BC\Downloads\123\" + "ЗапросПоиска.xml");
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;



При выполнении кода показывает вот такую ошибку:
{Форма.Форма.Форма(17)}: Ошибка при вызове метода контекста (Получить): Файл не обнаружен 'new SimpleXMLElement(trim($this->get_by_curl(http://adeo.pro/pricedetals2.php, <?xml version="1.0" encoding="UTF-8" ?> <message><param><action>price</action><login>123</login><password>321</password><code>881</code><sm>1</sm></param></message>')))': Ошибка работы с Интернет: ресурс не найден (404). <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /new SimpleXMLElement(trim($this-&gt;get_by_curl(http://adeo.pro/pricedetals2.php, &lt; was not found on this server.</p>
</body></html>
: Ошибка работы с Интернет: ресурс не найден (404)

Если честно в php не разбираюсь вообще никак. Поэтому даже понять не могу почему не работает. Может кто подскажет что именно не так, или как правильно сделать?

arccos6pi
13.03.2014, 09:32
Доброго всем времени суток!

Собственно вот в чём заключается моя проблема:

есть некий скрипт, который получает данные с других сайтов. В нём есть вот такой кусок кода, который получает некоторую информацию по авто запчастям:


$data = array();
$i = 1000;
$id = "123";
$psw = "321";
$sc = "881";

$xml_data = '<?xml version="1.0" encoding="UTF-8" ?> <message><param><action>price</action><login>' . $id . '</login><password>' . $psw . '</password><code>' . $sc . '</code><sm>1</sm></param></message>';

$url = "http://adeo.pro/pricedetals2.php";

$xml = new SimpleXMLElement(trim($this->get_by_curl($url, $xml_data)));

В переменную "$xml" (насколько я понял) попадают данные с сайта.

Копаясь в 1С и в и-нете нашёл небольшой пример кода для работы с httpСоединением. Попытался реализовать его в 1С:


xml_data = "<?xml version=""1.0"" encoding=""UTF-8"" ?> <message><param><action>price</action><login>tula71</login><password>SetTtT</password><code>" + КодДетали + "</code><sm>1</sm></param></message>'";
url = "http://adeo.pro/pricedetals2.php";

Попытка
HTTP = Новый HTTPСоединение("adeo.pro");
HTTP.Получить("new SimpleXMLElement(trim($this->get_by_curl(" + url + ", " + xml_data + ")))", "C:\Users\Admin1BC\Downloads\123\" + "ЗапросПоиска.xml");
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;



При выполнении кода показывает вот такую ошибку:
{Форма.Форма.Форма(17)}: Ошибка при вызове метода контекста (Получить): Файл не обнаружен 'new SimpleXMLElement(trim($this->get_by_curl(http://adeo.pro/pricedetals2.php, <?xml version="1.0" encoding="UTF-8" ?> <message><param><action>price</action><login>123</login><password>321</password><code>881</code><sm>1</sm></param></message>')))': Ошибка работы с Интернет: ресурс не найден (404). <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /new SimpleXMLElement(trim($this->get_by_curl(http://adeo.pro/pricedetals2.php, < was not found on this server.</p>
</body></html>
: Ошибка работы с Интернет: ресурс не найден (404)

Если честно в php не разбираюсь вообще никак. Поэтому даже понять не могу почему не работает. Может кто подскажет что именно не так, или как правильно сделать?в вашем случаем почти все не так
во-первых вам нужно не HTTP.Получить(), а HTTP.ОтправитьДляОбработки()
Прочитайте ЛС:)

Максимио
13.03.2014, 11:50
Попробовал сделать так как вы написали в ЛС. Всё равно не получается. Выдаёт вот такую ошибку:
{Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Couldn't resolve host name

Запинается как раз на строке: Соединение.ОтправитьДляОб� �аботки(ИмяФайлаОтправки, "/pricedetals2.php", ИмяВыходногоФайла, Заголовки);

-----------------------------------------------------------------------------

Хм... Странно получилось. Написал вот так и ошибка уже не выскочила:


Соединение = Новый HTTPСоединение("adeo.pro");
Попытка
Соединение.ОтправитьДляОб� �аботки(ИмяФайлаОтправки, "/pricedetals2.php", ИмяВыходногоФайла, Заголовки);
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;

Однако XML-файл был пустым...

Открыл файл блокнотом, а там вот такая инфа (только в строчку):
<?xml version="1.0" encoding="UTF-8"?>
<message>
<param>
<action>price</action>
<login>ЛОГИН</login>
<password>ПАРОЛЬ</password>
<code>881</code>
<sm>ПАРОЛЬ</sm>
</param>
</message>

arccos6pi
13.03.2014, 12:44
Попробовал сделать так как вы написали в ЛС. Всё равно не получается. Выдаёт вот такую ошибку:
{Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Couldn't resolve host name

Запинается как раз на строке: Соединение.ОтправитьДляОб� �аботки(ИмяФайлаОтправки, "/pricedetals2.php", ИмяВыходногоФайла, Заголовки);

-----------------------------------------------------------------------------

Хм... Странно получилось. Написал вот так и ошибка уже не выскочила:


Соединение = Новый HTTPСоединение("adeo.pro");
Попытка
Соединение.ОтправитьДляОб� �аботки(ИмяФайлаОтправки, "/pricedetals2.php", ИмяВыходногоФайла, Заголовки);
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;

Однако XML-файл был пустым...

Открыл файл блокнотом, а там вот такая инфа (только в строчку):
<?xml version="1.0" encoding="UTF-8"?>
<message>
<param>
<action>price</action>
<login>ЛОГИН</login>
<password>ПАРОЛЬ</password>
<code>881</code>
<sm>ПАРОЛЬ</sm>
</param>
</message>экстрасенов мало
<?xml version="1.0" encoding="UTF-8"?>
<message>
<param>
<action>price</action>
<login>ЛОГИН</login>
<password>ПАРОЛЬ</password>
<code>881</code>
<sm>ПАРОЛЬ</sm>
</param>
</message>проверяйте этот кусок,раз возвращается пустое
может какого параметра не хватает

Максимио
13.03.2014, 14:05
Прошу прощения. Это я тупанул.
На самом деле я проверял временный файл XML, который для запроса создавался (ИмяФайлаОтправки). А всё из-за того, что закоментировал код с удалением этого файла )).
Спасибо за помощь! Всё работает!

arccos6pi
13.03.2014, 16:31
Прошу прощения. Это я тупанул.
На самом деле я проверял временный файл XML, который для запроса создавался (ИмяФайлаОтправки). А всё из-за того, что закоментировал код с удалением этого файла )).
Спасибо за помощь! Всё работает!пожалуйста;)