Перейти к содержимому


Генерация QR-кода посредством Google API

quick response code QR-код QR

Сообщений в теме: 3

#1 Илья

    Активный участник

  • Пользователи
  • PipPipPip
  • 173 сообщений

Отправлено 21 Август 2015 - 20:20

Я не программист, от слова "совсем". Я - дилетант широкого профиля. Но люблю покопаться в компьютерах и программах, которые могут облегчить жизнь и работу.


Поэтому представляю на ваш суд код и прошу указать на недочеты и возможные подводные камни.



Преамбула:
 у нас в организации есть оборудование, установленное в помещении, где компьютеров нет. А информацию по оборудованию получить надо.

Но у работников есть смартфоны! А у некоторых еще и планшеты!
И я подумал, что можно сделать так, чтобы отсканировав код сотрудник попадал на карточку оборудования, из которой бы получил все необходимые сведения - ТТХ, инструкцию или что ещё ему нужно, то есть ту информацию об оборудовании что хранится в базе.


Для генерации кода решил использовать API от Google. Да, понимаю, что если вдруг Гугл закроет API, то я останусь с носом, и лучше бы использовать для этих целей локальный генератор на сервере, но лень.

За основу был взят код от wondertalik из этой темы, а так же кусок отсюда.

В результате получился код, который отсылает запрос Гуглу, получает картинку и кладёт её в базу. Можно, конечно, было бы и не класть картинку в КБ, но дикое количество запросов на генерирование картинок, которое будет выполняться каждый раз при отображении кодов может привести к тому, что, как бы это странно ни звучало, Гугл меня забанит. :D

Итак, нужно создать поле с типом "Изображение", размером 150*150 (этот размер в соответствии с кодом отдает нам Гугл).
Также, нужно создать вычилсение с условием срабатывания, необходимым Вам (у меня это - сохранение, т.к. массовых сохранений не предвидится, главное - не стОит делать срабатывание на "отображение поля")




//Присваиваем переменной ссылку на просмотр текущей записи.
//Следует учитывать, что символ "&" Гугловский парсер скушает и не отдаст ничего после него, поэтому его следует записать в URL-кодировке как "%26"
$url = "http://base.bing-online.ru/view_line2.php?table=".$table_id."%26line=".$line_id;

//Присваиваем переменной значение, которое отправит запрос на создание QR-кода размером 150*150
$srcImgUrl = "https://chart.googleapis.com/chart?chs=150x150&chld=M|0&cht=qr&chl=".$url;

//Гугл отдает PNG, поэтому явно указываем расширение.
	   $typeFile = png;
	  
//Гугл не отдает названия файла в удобочитаемом виде, поэтому для генерируемого изображения берем значение ID таблицы и значение ID строки
		$nameFile = $table_id."_".$line['ID'].".".$typeFile;

//Удаляем запись об имеющемся (старом) файле
		$line['Фото товара'] = "";
//Удаляем имеющийся файл
		drop_data_file($table_id, $line_id, $nameFile);
//Удаляем предпросмотр из папки cache
//!!!! Следует обратить внимание, что здесь и далее в коде используется идентификатор поля, в котором будет храниться изображение "QR-код" (11260), и его нужно сменить!
		$name_cache_file =  "cache" . "/" . $table_id . "_" . "11260" . "_" . $line_id . "_" . utf2eng($nameFile) . ".png";
		unlink($name_cache_file);

//Генерируем имя временного файла
		$file_hash = get_file_hash($field_id, $line_id, $nameFile);
		$path_tmp_name = "temp/" . $file_hash;

//Создаем дескриптор по указанному файлу.
		$fp = fopen($path_tmp_name, 'w+');

//Качаем файл по ссылке.
//PHP должен быть с поддержкой curl, иначе словим ошибку!
		$ch = curl_init($srcImgUrl);
		curl_setopt($ch, CURLOPT_FILE, $fp);
		$data = curl_exec($ch);
		curl_close($ch);
		fclose($fp);
		
//Определяем путь к загружаемому файлу в КБ

		$file_path = get_file_path(11260, $line['ID'], $nameFile);
//Создаем необходимую структуру директорий
		create_data_file_dirs(11260, $line['ID'], $nameFile);
//Копируем скаченный файл
		copy($path_tmp_name, $file_path);
//удаляем временный файл
		unlink($path_tmp_name);
//Перезаписываем изображение, хранящееся в поле "QR-код"
$line['QR-код']=$nameFile;

// Формируем предпросмотр изображения в папке cache
		$cur_line = $line;
		$cur_table = $table;
		$cur_field = get_table_fields($table);
		$cur_field = $cur_field[11260];
		$t = form_display_type($cur_field, $cur_line);




Дальше планирую создать шаблон, по которому будут печататься этикетки с QR-кодом и инвентарником оборудования. Печатаем на липкой бумажке, и клеим на нужный аппарат.

Еще раз напомню, что я "не настоящий сварщик"©, и буду рад замечаниям и предложениям по оптимизации и универсализации кода.

Сообщение отредактировал Илья: 21 Август 2015 - 20:21


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 23 Август 2015 - 15:49

Генерируете QR-код через гугл-апи? По идее можно найти алгоритм и написать свой код генерации (я так делал для стандартного штрих-кода), но с другой стороны ваш вариант проще.

#3 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 156 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 04 Ноябрь 2015 - 15:21

Вцелом неплохо. Но я все же использовал бы это. Отлично показала себя либа. Использовать просто и получаете независимость.

#4 Илья

    Активный участник

  • Пользователи
  • PipPipPip
  • 173 сообщений

Отправлено 05 Ноябрь 2015 - 19:51

Просмотр сообщенияwondertalik (04 Ноябрь 2015 - 15:21) писал:

Вцелом неплохо. Но я все же использовал бы это. Отлично показала себя либа. Использовать просто и получаете независимость.

Да, я видел эту библиотеку. Но, как я уже сообщил - "я не настоящий сварщик"©, мне было проще переписать чужой код. :)





Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных