Поиск товаров по штрихкоду на сайте www.ean13.info

24.01.17

Интеграция - Сайты и интернет-магазины

Описание товаров, имеющих штрихкод, с некоторой вероятностью можно найти на www.ean13.info. Обработка выполняет этот поиск. Немного доработав, можно использовать для наполнения справочника "Номенклатура" с помощью сканера штрихкодов. (UPD: С недавних пор перестало работать из-за перевода сайта на https, требует соответствующей доработки)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Поиск товаров в ean13.info
.epf 17,72Kb
23
23 Скачать (1 SM) Купить за 1 850 руб.

Принцип действия очень простой.

http://www.ean13.info/4604290001691.htm - пример описания товара по его штрихкоду. Т.е. в форме обработки задаем список желаемых штрихкодов, на каждый из них запрашивается соответствующая страница.

Далее страница парсится по этому алгоритму: //infostart.ru/public/308253/.

Обработка на обычных и управляемых формах одновременно. Выполняет только поиск описания товаров, при желании можно доработать для создания элементов справочника "Номенклатура" по найденным результатам.

Для использования обработки не требуется регистрация. Однако при активном употреблении через какое-то время сайт начинает выдавать капчу вместо привычного описания товаров. В каталоге также имеется платный API (5000 запросов за 10 USD). 

UPD:

Если же ключ API у вас есть, то достаточно передать его вторым параметром в метод "ЗаполнитьТаблицуТоваров" (или указать в форме, если вы скачали обработку полностью), после чего получение данных о товарах пойдет живее и без неизбежного бана. При "боевом" использовании (более 50-100 запросов) это рекомендованный вариант работы.

Тестовый ключ xccvg55kh43jjf указан здесь http://www.mpk.dn.ua/ean13_info_platnoje_api.html и дает доступ только к одному товару: 4603172600007, Сигареты "Прима люкс" без фильтра.

P.S. Выкладываю исходники модуля объекта (в формах кода почти нет). В комментариях ниже есть альтернативный метод парсинга.

Перем СоединениеССервером;//кэш

Функция getXPathElement(sXPath, objElement )
	//взял здесь: //infostart.ru/public/308253/
	
     // Split the xpath statement
    лМассивХР = СтрЗаменить(sXPath, "/",Символы.ПС);
    лИндексНоды = СтрПолучитьСтроку(лМассивХР,1); //лИндексНоды
    Если Найти(лИндексНоды, "@id") > 0 Тогда
        лИмя = СтрЗаменить(лИндексНоды,"[","");
        лИмя = СтрЗаменить(лИмя,"]","");
        лИмя = СтрЗаменить(лИмя,"=",Символы.ПС);
        лИмя = СтрПолучитьСтроку(лИмя,2);
        лИмя = СтрЗаменить(лИмя,"""","");
        ЛobjElement = objElement.ПолучитьЭлементПоИдентификатору(лИмя); 
        лМассивХР = СокрЛП(СтрЗаменить(лМассивХР,СтрПолучитьСтроку(лМассивХР,1),""));
        лИндексНоды = СтрПолучитьСтроку(лМассивХР,1);
    Иначе 
        ЛobjElement = objElement;
    КонецЕсли;    
    
    If Not Найти(лИндексНоды, "[") > 0 Then
        sNodeName = лИндексНоды;
        lNodeIndex = 1;
    Else
        лИндексНоды = СтрЗаменить(лИндексНоды, "[",Символы.ПС);
        лИндексНоды = СтрЗаменить(лИндексНоды, "]",Символы.ПС);
        sNodeName =  СтрПолучитьСтроку(лИндексНоды,1);
        lNodeIndex = Число(СтрПолучитьСтроку(лИндексНоды,2));
    EndIf;
    sRestOfXPath ="";
    Для Сч =2 По СтрЧислоСтрок(лМассивХР) Цикл
        sRestOfXPath = sRestOfXPath + ?(Сч=2,"","/")+СтрПолучитьСтроку(лМассивХР,Сч);        
    КонецЦикла;
     
    getXPathElement = Неопределено;
    
    лСчЭлементов = 0;
    For lCount = 0 To ЛobjElement.ДочерниеУзлы.Количество() - 1 Цикл
        If ВРег(ЛobjElement.ДочерниеУзлы.Item(lCount).ИмяУзла) = ВРег(sNodeName) Then
            лСчЭлементов = лСчЭлементов + 1;
            If lNodeIndex = лСчЭлементов Then
                If sRestOfXPath = "" Then
                    getXPathElement = objElement.ДочерниеУзлы.Элемент(lCount);
                    Прервать;
                Else
                    getXPathElement = getXPathElement(sRestOfXPath, ЛobjElement.ДочерниеУзлы.Элемент(lCount));
                    Прервать;
                EndIf;
            EndIf;
        EndIf;
    КонецЦикла;
    Возврат getXPathElement;
КонецФункции

Функция ПолучитьРезультатПарсингаWWW(ЛокальноеИмяФайла)
	
	РезультатПарсинга = Новый Структура;
	
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.ОткрытьФайл(ЛокальноеИмяФайла,"UTF8");
	ПостроительДом = Новый ПостроительDOM;
	Документ = ПостроительДом.Прочитать(ЧтениеHTML);
	ЧтениеHTML.Закрыть();
	
	//теперь XPATH, который не совсем XPATH
	ТекстЗапроса = "html[2]/body/div[1]/div/div[3]/div[2]";
	
	СекцияОписания = getXPathElement(ТекстЗапроса,Документ);
	
	Попытка
		РезультатПарсинга.Вставить("Наименование",	getXPathElement("h1/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Успешно",		НЕ (РезультатПарсинга.Наименование = "Товар не найден в базе данных"));
	Исключение	
		//неправильный формат штрихкода или еще какая беда
		РезультатПарсинга.Вставить("Успешно",		Ложь);
	КонецПопытки;	
	
	Если РезультатПарсинга.Успешно Тогда
		РезультатПарсинга.Вставить("ТипШтрихКода",	getXPathElement("ul/li[2]/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Страна",		getXPathElement("ul/li[3]/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Производитель",	getXPathElement("ul/li[4]/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Бренд",			getXPathElement("ul/li[5]/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Категория",		getXPathElement("ul/li[6]/span",СекцияОписания).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Описание",		СокрЛП(getXPathElement("ul/li[7]/span/#text",СекцияОписания).ТекстовоеСодержимое));
	КонецЕсли;	
	
	Возврат РезультатПарсинга;
	
КонецФункции

Функция ПолучитьРезультатПарсингаXML(ЛокальноеИмяФайла)
	
	РезультатПарсинга = Новый Структура;
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ЛокальноеИмяФайла,,,"UTF8");
	
	ПостроительДом = Новый ПостроительDOM;
	Попытка
		Дерево = ПостроительДом.Прочитать(ЧтениеXML);
	Исключение
		//Вместо XML сервер может вернуть текст "Отсутствует ключ для доступа к API" (видимо, если лимит запросов ключа исчерпан)
		РезультатПарсинга.Вставить("Успешно",Ложь);
		Возврат РезультатПарсинга;
	КонецПопытки;
		
	ЧтениеXML.Закрыть();
	
	Попытка
		РезультатПарсинга.Вставить("Успешно",		getXPathElement("ean13/valid",Дерево).ТекстовоеСодержимое="1");
		РезультатПарсинга.Вставить("Наименование",	getXPathElement("ean13/name",Дерево).ТекстовоеСодержимое);
	Исключение	
		//неправильный формат штрихкода или еще какая беда
		РезультатПарсинга.Вставить("Успешно", Ложь);
	КонецПопытки;	
	
	Если РезультатПарсинга.Успешно Тогда
		//РезультатПарсинга.Вставить("ТипШтрихКода",			getXPathElement("ean13/name",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Страна",					getXPathElement("ean13/contry",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Производитель",				getXPathElement("ean13/man",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Бренд",						getXPathElement("ean13/brand",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Категория",					getXPathElement("ean13/cat",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("Описание",					getXPathElement("ean13/desc",Дерево).ТекстовоеСодержимое);
		РезультатПарсинга.Вставить("ДатаПоследнегоИзменения",	ДатаXMLВ1С(getXPathElement("ean13/lastmod",Дерево).ТекстовоеСодержимое));
		РезультатПарсинга.Вставить("ОсталосьЗапросовAPI",		Число(getXPathElement("ean13/yourlimit",Дерево).ТекстовоеСодержимое));
	КонецЕсли;	
	
	Возврат РезультатПарсинга;
	
КонецФункции

Функция ДатаXMLВ1С(ЗНАЧ ДатаСтрокой)
	
	//Пример: 2014-09-05T19:03:38+04:00
	
	Перем Результат;
	
	ДатаСтрокой = Лев(ДатаСтрокой,19);
	ДатаСтрокой = СтрЗаменить(ДатаСтрокой,"-","");
	ДатаСтрокой = СтрЗаменить(ДатаСтрокой,":","");
	ДатаСтрокой = СтрЗаменить(ДатаСтрокой,"T","");
	
	Попытка
		Результат = Дата(ДатаСтрокой);
	Исключение
		//не критично
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции

Функция ПроверитьШтрихкод(Штрихкод,КлючAPI)
	
	//можно еще кэширование добавить
	
	Если НЕ ЗначениеЗаполнено(КлючAPI) Тогда
		//ЛокальноеИмяФайла = "c:\pricat\Doc\ean13.info\Капот 2107-8401012, штрих-код_ 4604290001363 - Ean13.info, информация о товаре.html";
		ЛокальноеИмяФайла = ПолучитьФайлHTTP("/"+Штрихкод+".htm");
		Результат = ПолучитьРезультатПарсингаWWW(ЛокальноеИмяФайла);
	Иначе
		ЛокальноеИмяФайла = ПолучитьФайлHTTP("/api.php?code="+Штрихкод+"&key="+КлючAPI); // /api.php?code=4603172600007&key=xccvg55kh43jjf
		Результат = ПолучитьРезультатПарсингаXML(ЛокальноеИмяФайла);
	КонецЕсли;
	
	УдалитьФайлы(ЛокальноеИмяФайла);
	Возврат Результат;
	
КонецФункции

Функция ПолучитьФайлHTTP(АдресЗапроса)
	
	Если СоединениеССервером=Неопределено Тогда
		Сервер = "www.ean13.info";
		СоединениеССервером = Новый HTTPСоединение(Сервер);
	КонецЕсли;	
	ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
	СоединениеССервером.Получить(АдресЗапроса,ИмяФайлаОтвета);
	Возврат ИмяФайлаОтвета;
	
КонецФункции	

Функция ПолучитьТестовыеДанные() Экспорт
	
	Возврат 
	
	"4603172600007
	|4604290001363
	|
	|4690449004650
	|штрихкод, который должен свалиться
	|4690449004651";
	
КонецФункции	

Процедура ЗаполнитьТаблицуТоваров(СписокШтрихкодов,КлючAPI="") Экспорт
	
	Товары.Очистить();
	
	Для Сч=1 по СтрЧислоСтрок(СписокШтрихкодов) Цикл
		ТекШтрихкод = СтрПолучитьСтроку(СписокШтрихкодов,Сч);
		Если СокрЛП(ТекШтрихкод)<>"" Тогда
			
			НовСтрока = Товары.Добавить();
			НовСтрока.Штрихкод = ТекШтрихкод;
			
			Попытка
				РезультатПарсинга = ПроверитьШтрихкод(СокрЛП(ТекШтрихкод),КлючAPI);
				ЗаполнитьЗначенияСвойств(НовСтрока,РезультатПарсинга);
			Исключение
				_Ошибка = ОписаниеОшибки();
				Сообщить("Не найден штрихкод "+ТекШтрихкод+" по причине:
				|"+_Ошибка);
			КонецПопытки;	
			
		КонецЕсли;	
	КонецЦикла;	
	
КонецПроцедуры	

штрихкоды ean13.info

См. также

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    6273    41    11    

37

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 3.0. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер). Интегрировано в Чек ККМ, Рабочее место кассира (РМК)

24000 руб.

02.11.2024    831    4    0    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18654    20    22    

18

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    1075    2    4    

3

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20813    13    19    

18

Сайты и интернет-магазины Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31348    8    12    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. webester 26 09.01.16 10:49 Сейчас в теме
Прошу прощения, что мешаю зарабатывать мани, но там же несколько строк.
			Соединение = Новый HTTPСоединение("www.ean13.info");
			Ответ = Соединение.Получить(Новый HTTPЗапрос(""+КакойТоШтрихКод+".htm"));
			
			РезультатПоиска = Новый Структура("Статус, Товар,Страна,Производитель,Штрихкод", СтрокаСообщения);

			Если Ответ.КодСостояния = 200 Тогда
				ЧтениеХТМЛ = Новый ЧтениеHTML;
				ЧтениеХТМЛ.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
				ПостроительДОМ = Новый ПостроительDOM;
				
				ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
				ЭлементыДОМ = ДокументХТМЛ.ПолучитьЭлементыПоИмени("span");
				Если ЭлементыДОМ[1].ТекстовоеСодержимое = "Товар не найден в базе данных" Тогда
					//может будем как то обрабатывать
				Иначе
					РезультатПоиска.Статус = "Найдено в интернете";
					РезультатПоиска.Товар = ЭлементыДОМ[1].ТекстовоеСодержимое;
					РезультатПоиска.Страна = ЭлементыДОМ[4].ТекстовоеСодержимое;
					РезультатПоиска.Производитель = ЭлементыДОМ[5].ТекстовоеСодержимое;
					РезультатПоиска.Штрихкод = ТекКод;
				КонецЕсли; 
			Иначе
				//может будем как то обрабатывать
			КонецЕсли; 


Показать
2. skif47 353 09.01.16 12:08 Сейчас в теме
(1) webester, зарабатывание мани не является моей основной целью. Так что нет, не мешаете. Кажется странным, что вместо того, чтобы оформить свой код в публикацию, вы пишете его в комментариях к чужой публикации.
Теперь по существу. Вы часто ищете штрихкоды на этом сайте? С какой целью - проверить существующие в вашей базе товары или добавить новые? Имеет смысл добавить в обработку поддержку API и попробовать пообщаться с хозяевами базы на тему "дайте тарифы попроще и с оплатой не через сбербанк"? Создание номенклатуры по найденному стоит добавлять?
4. webester 26 09.01.16 12:23 Сейчас в теме
(2)
Кажется странным, что вместо того, чтобы оформить свой код в публикацию, вы пишете его в комментариях к чужой публикации

Мне показалось излишним делать публикацию на каждые 10 строк кода. Слишком простая штука. Поэтому добавил когда увидел ваш пост, раз вы все таки сочли нужным делать для этого пост. Мне кажется вам надо было сразу выкладывать код, раз вам не нужны мани.Что бы мог воспользоваться любой даже без аккаунта на ИС.

Вы часто ищете штрихкоды на этом сайте?

Нет.

С какой целью - проверить существующие в вашей базе товары или добавить новые?

Запускаю работающую аптеку, неохота руками все набирать. по макс убрать ручной труд, насколько возможно. Будем искать названия в файлах поставщиков, если не найдется, то в базе, если и там не будет, то наберет фармацевт название ручками.

Имеет смысл добавить в обработку поддержку API и попробовать пообщаться с хозяевами базы на тему "дайте тарифы попроще и с оплатой не через сбербанк"?
Вам виднее, но мне кажется добавлять апи которое работает с апи, какой то перебор.

Создание номенклатуры по найденному стоит добавлять?
Слишком щепетильный вопрос, для аптеки критичен производитель, для вас наверно нет, где то должны характеристики заполняться, а к ним уже штрихкод, где то не должны. В разных конфигурациях по разному это должно происходить, если вам хочется этим заниматься, то почему бы и нет? Я честно сказать практический смысл нахожу с трудом. Кому надо тот себе напишет, а кто не может, может заказать за недорого, создание номенклатуры опять же несколько строк кода если под конкретное решение.
komatoza; +1 Ответить
5. skif47 353 10.01.16 00:34 Сейчас в теме
(4) webester, Согласен, исходники выложил.
6. skif47 353 10.01.16 01:23 Сейчас в теме
(4) webester,
Будем искать названия в файлах поставщиков

Если не секрет, что вообще в этом случае предоставляют поставщики? Прайсы, накладные, CommerceML? В моем представлении, фармацевтика - достаточно прокачанная отрасль в плане IT.

добавлять апи которое работает с апи, какой то перебор.
речь шла о том, чтобы запрашивать инфу о товарах не парсингом страниц, а через предназначенный для этого API. Это может пригодиться при необходимости запросить 50-100 и больше штрихкодов (у меня капча вылезла примерно после 50 запросов). Вам действительно ни к чему, если редко туда ходите.
7. webester 26 10.01.16 18:04 Сейчас в теме
(6)
Если не секрет, что вообще в этом случае предоставляют поставщики?

Кто, во что горазд. txt, xls, xml последнее прилетело в html.Какой то бред честное слово.Настолько все строго с этими ценами, условиями и тд такой бардак в поставке накладных.
3. skif47 353 09.01.16 12:11 Сейчас в теме
Эти вопросы ко всем читающим, кстати )
8. sfs1981 04.02.16 14:02 Сейчас в теме
Добрый день.
Как представитель ean13.info, добавлю от себя:
1. Тарифы попроще у нас есть, для тех кто берет доступ оптом, существуют скидки. Если нужно меньше чем 5000 запросов - пиште, договоримся.
2. Мы реализовали обратное АПИ. Теперь, при передаче нам данных о товарах, которых у нас нет , вы получаете бесплатные запросы к базе (1 новый товар = 10 бесплатных запросов).
Ну и похвастаемся: размер базы приближается к 10 млн. товаров.
9. skif47 353 18.01.17 17:53 Сейчас в теме
Новости на всякий случай:сайт ean13.info перешел на https.
По запросам вроде http://ean13.info/4600171016044.htm
возвращается текст:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved here.</p>
</body></html>

Соответственно, функция ПолучитьФайлHTTP потребует изменения в способе создания http соединения: должно быть создано безопасное соединение. Параметры конструктора объекта, насколько я помню, различаются в платформах 8.2 и 8.3, также могут потребоваться танцы с бубном вокруг сертификатов.

Увы, заниматься всем этим времени нет.
Оставьте свое сообщение