Вернусь к тому, с чего начал в предыдущем материале “Тыринг с ФИПСа” – с автоматизации процесса закачки российских патентов из реестров Роспатента (ФИПС). Итак, “Уловка компьютерной крысы № 13” в более подробном изложении…
О “тыринге”
Честно говоря, задача автоматическойзагрузки описаний российских патентов возникает не у всех аспирантов технических специальностей. Повторю в “стотыщпитсотый” раз: если вам нужно скачать несколько (3÷5) описаний патентов, то это леГко делается собственными умелыми ручками, и не займёт у вас много времени.
Однако, бывают ситуации, когда число патентов, которые нужно быстро выдернуть из реестра Роспатента (ФИПС), довольно велико. Например, когда тема диссертации обильно исхожена российскими изобретателями, и нужно оперативно произвести выборку подходящих патентов при написании обзорной Главы или при проведении1)Это, конечно, характерно не для аспирантов, а для молодых учёных, участвующих в НИР. патентных исследований.
Когда много лет назад я (исключительно по службе) в первый раз столкнулся с необходимостью увести из ФИПСа за раз и швидко несколько сотен полнотекстовых описаний патентов РФ на изобретения и полезные модели, то мне пришлось2)Я допускаю, что юным девочкам не “в лом” триста раз делать одну и ту же однообразную работу. Ну, а для меня, в силу природной лени и критического возраста, уже трёхкратное повторение рутинных действий, отнимающих бесценное время, навевает тоскливое уныние. этот процесс автоматизировать подручными средствами.
Вбазе данных Патентного ведомства США url-ссылка на полнотекстовое описание патента на изобретение в html-формате (только текст) и аналогичные ссылки на страницы патента в pdf-формате (текст, графики, диаграммы, рисунки)3)Изначально каждая страница полнотекстового описания патента США была представлена в виде изображения в tif-формате. Лет семь-восемь назад вся (вся, Карл!) база была переведена в pdf-формат.однозначно привязаны к уникальному номеру патента и, таким образом, могут быть сгенерированы автоматически для последующей независимой друг от друга закачки html- и pdf-описаний.
В отличие от американского ведомства, в открытом реестре Роспатента ссылка на полнотекстовое pdf-описание на изобретение привязана к номеру патента весьма геморроидальным способом и встроена в html-описание. И то, такая ссылка появилась в html-описаниях только с 2003 года. Причём структура этой ссылки менялась за эти годы пару раз точно. Я не думаю, что это было сделано специально, чтобы воспрепятствовать поточному уводу информации из ФИПСа. Вероятнее всего, это – стандартные кривые руки тех, кто лепил эту систему.
Таким образом, для того, чтобы в автоматическом режиме скачивать pdf-описания патентов из реестра ФИПС, нужно предварительно скачивать их html-описания и извлекать из них нужные url-ссылки на pdf-файлы. Вот, я и говорю: геморрой.
Посмотреть, как всё это работает “вживую”, можно на видео (480х270) буквально строкой ниже, либо перейти по ссылке на youtube и посмотреть “киношечку” в разрешении 1280х720.
Между прочим, для тех аспирантов, кто умеет “в программирование” гораздо лучше меня, не составит труда наваять своюсобственную программу, которая будет автоматически загружать html-описания патентов из БД Роспатента (ФИПС). Единственное, что для этого нужно знать, – это структура url-ссылок на изобретение и полезную модель.
Ниже приведены ссылки на html-описания патента на изобретение (№ 2543358)
Заменяя в цикле эти номера, вы сможете “тырить” описания российских патентов поточно, без личного участия. Экономя, таким образом, своё драгоценное время.
Но те, кто не владеет (ай-я-яй!) навыками программирования или ему некогда этим заниматься, могут воспользоваться моим “рукоделием”.
Для этого вам нужно будет скачать архивный файл “DWNLFIPS.zip” (3909352 байт).
Замечу, что весь этот “самопал” без нареканий работает в университете и дома на моих рабочих “лошадках” – Windows 7 и Windows XP. Помимо этого, работоспособность джентльменского набора для “тырения” была проверена на “чужих” компьютерах с Windows 8/10.
Начало
Скачав файл “DWNLFIPS.zip”, разархивируйте его, например, на диск C:\ в папку “DWNLFIPS”. Структура и содержимое папки показано на рисунке ниже.
Рис. 1. Структура папки “DWNLFIPS” и файлы
Назначение папок
В папке “nums”
Рис. 2. Папка “nums” с файлами, содержащими номера патентов
содержится текстовый файл “ruiz-nums.txt”4)Столбец чисел вида:
2743027
2211458
2461018 с номерами патентов на изобретения (IZ),
Рис. 3. Текстовый файл “ruis-nums.txt” с номерами патентов на изобретения
и “rupm-nums.txt”5)Столбец чисел вида:
96664
183565
136192 с номерами патентов на полезные модели (PM), соответственно.
Рис. 4. Текстовый файл “rupm-nums.txt” с номерами патентов на полезные модели
В папки “html” и “pdfs” закачиваются html- и pdf-описания патентов при выполнении цикла закачки описаний.
Рис. 5. Папки для текущей закачки html- и pdf-описаний патентов
В папке “rndm”
Рис. 6. Папка, в которой генерируются случайные целые числа от 1 до 32767
с помощью исполняемого файла “rndm1000.exe”
Рис. 7. Исполняемый файл “rndm1000.exe” с необходимыми dll-библиотеками
генерируется текстовый файл “rndms1000.txt” с последовательностью из тысячи случайных целых чисел от 1 до 32767. Затем из этого файла производится выборка случайных чисел в интервале от 8000 до 15999.
Подход к генерации неповторяющихся случайных чисел был взят из материала “Урок № 71. Генерация случайных чисел”. Сам исходник был несколько модифицирован, чтобы получить один столбец случайных чисел, не повторяющихся при последующих генерациях.
#include
#include
#include
#include // для функций rand() и srand()
#include // для функции time()
int main()
{
srand(static_cast(time(0))); // устанавливаем значение системных часов в качестве стартового числа
std::ofstream out("rndms1000.txt");
for (int count=0; count < 1000; ++count)
{
out << rand() << '\n';
}
out.close();
return 0;
}
@Echo off
cls
@rem
C:\MinGW-w64\mingw32\bin\g++.exe get1000rndms.cpp -o C:\mingw-w64\mingw32\bin\rndm1000.exe
@rem
:END
Забегая чуть вперёд, поясню, что эти числа используются для формирования случайной паузы от 8 до 16 секунд между закачками. Дело в том, что при автоматической закачке html-описаний с сайта ФИПС без пауз (или почти без пауз) сервер блокирует загрузку файла и выдаёт сообщение “Слишком быстрый просмотр документов”.
Папки “temp” и “tmps” используются для хранения промежуточных вре́менных файлов.
Рис. 8. Папки для хранения временных и промежуточных файлов
В папку “_ready” “складируются” уже “готовые”, закачанные полнотекстовые описания патентов на изобретения и полезные модели,
Рис. 9. Папка, куда “складируются” результаты закачки описаний патентов
отдельно в папки “html” и “pdfs”.
Рис. 10. Папки, в которые перемещаются закачанные html- и pdf-описания патентов
Используемые exe-файлы
Лицам, настороженно относящимся к сторонним exe-файлам лично, либо имеющим ограниченные права как пользователь, или “шизофренический” антивирус, сообщаю, что никаких вирусов или зловредов в exe- и bat-файлах в папке “DWNLFIPS” не имеется. Для этого прилагаю их перечень со ссылками на утилиты, в том числе, и на более “свежие” версии, чем у меня.
Рис. 11. Утилиты (исполняемые файлы), используемые при закачке и обработке файлов
BeCyPDFMetaEdit.exe – редактор метаданных в pdf-файле (в данном случае используется для “нормализации” pdf-описания патента);
clipin.exe – утилита командной строки для добавления содержимого файла в буфер обмена (из пакета утилит “Kilowatt Software’s” – ресурс прекратил существование);
clipout.exe – утилита командной строки для добавления содержимого буфера обмена в файл (из пакета утилит “Kilowatt Software’s” – ресурс прекратил существование);
cmsort.exe (v.1.71) – утилита командной строки для сортировки текстовых строк (для сортировки номеров патентов в файлах “ruiz-nums.txt” и “rupm-nums.txt” в папке “nums”);
curl.exe (v.7.74.0) – утилита командной строки для скачивания и загрузки данных (для закачки html- и pdf-описаний патентов);
cut.exe (v.2.0) – утилита командной строки для вывода заданной части текстовой строки (в данном случае используется для вывода столбца данных с номерами патентов);
grep.exe (v.2.4.2) – утилита командной строки для поиска определённого текста по файлу или файлам (в данном случае используется для удаления пустых строк в файлах);
Ещё один исполняемый файл (“rndm1000.exe”) находится в папке “rndm” (см. рис. 7).
Листинги bat-файлов
Ниже приведены листинги (в кодировке cp1251) bat-файлов, используемых при закачке полнотекстовых описаний патентов РФ.
Bat-файл “_clean-all.bat” предназначен для тотальной очистки папок (“html”, “nums”, “pdfs”, “rndm”, “temp”, “tmps”) от вспомогательных и промежуточных файлов. После его запуска удаляются все файлы в указанных папках и промежуточные файлы в корне. При этом в папке “nums” “обнуляются” текстовые файлы “ruiz-nums.txt” и “rupm-nums.txt” с номерами патентов, подлежащих загрузке.
Рис. 12. Bat-файл для очистки папок, промежуточных файлов, результатов поиска
Листинг файла “_clean-all.bat”
@Echo off
cls
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Очистка папок и удаление промежуточных файлов "
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem "Очистка предыдущих результатов поиска"
if exist search-results.txt del /Q search-results.txt
if exist search-results-T.csv del /Q search-results-T.csv
@rem
@rem ---------------------------------------------------------
@rem "Удаление предыдущих файлов со случайными числами"
if exist rndm_8-15s.txt del /Q rndm_8-15s.txt
if exist rndm\rndms1000.txt del /Q rndm\rndms1000.txt
@rem
@rem ---------------------------------------------------------
@rem "Очистка содержимого папок"
@rem
if exist html\*.html del /Q html\*.html
if exist pdfs\*.pdf del /Q pdfs\*.pdf
if exist temp\*.* del /Q temp\*.*
if exist tmps\*.* del /Q tmps\*.*
@rem
@rem ---------------------------------------------------------
@rem "Удаление вспомогательных и промежуточных файлов"
@rem
if exist null del /Q null
if exist patnum.txt del /Q patnum.txt
if exist rndms1000.txt del /Q rndms1000.txt
if exist ztemp*.bat del /Q ztemp*.bat
@rem
@rem ---------------------------------------------------------
@rem "Формирование 'пустого' файла с номерами патентов"
@rem "на изобретения"
echo.>nums\ruiz-nums.txt
@rem
@rem "Формирование 'пустого' файла с номерами патентов"
@rem "на полезные модели"
echo.>nums\rupm-nums.txt
@rem
@rem ---------------------------------------------------------
:END
Bat-файл “_clean-ready.bat” предназначен для очистки папок “html” и “pdfs” в папке “_ready” от html- и pdf-файлов. Этот файл предназначен для удаления предыдущих результатов закачки описаний патентов.
Рис. 13. Bat-файл для удаления html- и pdf-файлов в папке “_ready”
Листинг файла “_clean-ready.bat”
@Echo off
cls
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Очистка папки '_ready'"
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
if exist _ready\html\*.html del /Q _ready\html\*.html
if exist _ready\pdfs\*.pdf del /Q _ready\pdfs\*.pdf
@rem
@rem ---------------------------------------------------------
:END
Bat-файл “1_patnums.bat” предназначен для формирования списков номеров патентов из скопированных в буфер памяти результатов поиска в БД ФИПС.
Рис. 14. Bat-файл для формирования “ruiz-nums.txt” и “rupm-nums.txt” в папке “nums”
Листинг файла “1_patnums.bat”
@Echo off
cls
@rem
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Формирование списков патентов по результатам "
@rem "поиска в БД ФИПС "
@rem " "
@rem "Вход: скопированные в буфер памяти результаты поиска "
@rem "на сайте ФИПС "
@rem " "
@rem "Выход 1: файл 'ruiz-nums.txt' в папке 'nums' "
@rem "с номерами патентов на изобретения "
@rem " "
@rem "Выход 2: файл 'rupm-nums.txt' в папке 'nums' "
@rem "с номерами патентов на полезные модели "
@rem " "
@rem "Выход 3: файл базы данных 'search-results.txt' "
@rem "Выход 4: файл базы данных 'search-results-T.csv' "
@rem "с результатами поиска (от 1 до 50) "
@rem " "
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem "Первоначальная очистка предыдущих результатов"
@rem
@rem "Удаление предыдущих файлов с номерами патентов"
if exist nums\ruiz-nums.txt del /Q nums\ruiz-nums.txt
if exist nums\rupm-nums.txt del /Q nums\rupm-nums.txt
@rem
@rem "Удаление файлов со сводной инофрмацией о поиске"
if exist search-results.txt del /Q search-results.txt
if exist search-results-T.txt del /Q search-results-T.txt
@rem
@rem "Передаём содержимое буфера памяти в файл 'temp\zug00'"
nircmd clipboard addfile temp\zug00
::clipout >temp\zug00
@rem
@rem "Заменяем в файле 'temp\zug00' кавычки на ''"
sed "s/\x22/''/g" <temp\zug00 >temp\zug01
@rem
@rem "Удаляем пробелы в начале строк"
sed "s/^ *//;s/$/\r/" <temp\zug01 >temp\zug02
@rem
@rem "Формируем строки с результатами поиска"
sed "/^[0-9]\{1,\}\./s/^/#/" <temp\zug02 >temp\zug03
sed "/^#/!s/^/=/" <temp\zug03 >temp\zug04
sed "s/$/\r/" <temp\zug04 >temp\zug05
sed -e :a -e "$!N;s/\n=/\t/;ta" -e "P;D" <temp\zug05 >temp\zug06
sed "s/^#//;s/$/\r/" <temp\zug06 >temp\zug07
sed "s/(\([0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{4\}\))/\1/" <temp\zug07 >temp\zug08
@rem
@rem "Выделяем строки с результатами поиска изобретений"
sed "/\tђ€/!d" <temp\zug08 >temp\zug09
@rem
@rem "В папке 'nums' формируем файл 'ruiz-nums.txt'"
cut -f2 <temp\zug09 >nums\ruiz-nums.txt
@rem
@rem "Выделяем строки с результатами поиска полезных моделей"
sed "/\t”ЏЊ/!d" <temp\zug08 >temp\zug10
@rem
@rem "В папке 'nums' формируем файл 'rupm-nums.txt'"
cut -f2 <temp\zug10 >nums\rupm-nums.txt
@rem
@rem "Если патенты на изобретения не найдены,"
@rem "то удаляем 'нулевой' файл 'ruiz-nums.txt'"
set Size=0
set Files=nums\ruiz-nums.txt
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem
@rem "Если патенты на полезные модели не найдены,"
@rem "то удаляем 'нулевой' файл 'rupm-nums.txt'"
set Size=0
set Files=nums\rupm-nums.txt
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem
@rem "Формируем файл 'search-results.txt' со строками"
@rem "для каждого патента в виде:"
@rem "N п/п"
@rem "N документа"
@rem "Дата публикации"
@rem "Название"
@rem "Библиотека"
sed "s/$/\r/" <temp\zug02 >search-results.txt
@rem
@rem "Формируем файл 'search-results-T.txt', в котором"
@rem "для каждого патента строки имеют вид:"
@rem "N п/п";"N документа";"Дата публикации";"Название";"Библиотека"
sed "s/\t/\x22;\x22/g" <temp\zug08 >temp\zug12
sed "s/^\(.*\)$/\x22\1\x22\r/" <temp\zug12 >search-results-T.csv
@rem
@rem ----------------------------------------------------------
@rem "ОЧИСТКА"
if exist null del /Q null
if exist temp\zug* del /Q temp\zug*
@rem
@rem ----------------------------------------------------------
:END
Для организации поточной закачки описаний патентов на изобретения (номера которых записаны в текстовом файле “ruiz-nums.txt” в папке “nums”) используется bat-файл “2_stream-IZ.bat”.
Рис. 15. Bat-файл для поточной закачки описаний патентов на изобретения
Загрузка html- и pdf-описания каждого патента происходит с временно́й задержкой около 1,5 секунд, а временно́й интервал между загрузками описаний патентов в цикле изменяется случайным образом от 8 до 16 секунд. В принципе, можно было бы уменьшить эту паузу, но я полагаю, что овчинка не стоит выделки. При необходимости закачать пару сотен описаний российских патентов, я формирую соответствующие перечни номеров и перед уходом домой запускаю “станок”. И как говорила Антонина Валерьяновна: “Вуаси, вуаля!”.
Листинг файла “2_stream-IZ.bat”
@Echo off
cls
@rem
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Поточная закачка html- и pdf-описаний патентов РФ"
@rem "на изобретения"
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem "Вход: файл 'ruiz-nums.txt' в папке 'nums' с номерами патентов"
@rem "на изобретения со строками вида"
@rem 2498341
@rem 2482896
@rem 2339969
@rem 2572085
@rem ...
@rem
@rem "Выход 1: html-описания в папке '_ready\html' вида RU2498341.html"
@rem "Выход 2: pdf-описания в папке '_ready\pdfs' вида RU2498341.pdf"
@rem
@rem ----------------------------------------------------------
@rem "Генерируем файл со случайными числами от 8000 до 15999"
@rem "Формирование файла 'rndm_8-15s.txt' c последовательностью"
@rem "случайных чисел от 8000 до 15999"
@rem
CALL mkrndms.bat
@rem
@rem "Удаляем из файла 'ruiz-nums.txt' все символы, кроме цифр"
copy nums\ruiz-nums.txt temp\zun01 >null
tr -d " [:alpha:][:punct:]#" <temp\zun01 >temp\zun02
@rem
@rem "Удаляем пустые строки"
grep "." <temp\zun02 >temp\zun03
@rem
@rem "Сортируем строки, удаляем дубликаты (при необходимости)"
cmsort /D temp\zun03 temp\zun04
cls
@rem
@rem ----------------------------------------------------------
@rem "ЦИКЛ поточной закачки описаний патентов РФ"
@rem "на изобретения"
@rem
@rem --------------------------------------------
@rem "Используемые bat-файлы: 'tpause1.bat' и 'dwnl-1-IZ.bat'"
@rem
@rem "1. Файл 'tpause1.bat' состоит из 3-х строк вида, например"
@rem @Echo off
@rem cls
@rem nircmd wait 9513
@rem
@rem "При выполнении такого 'tpause1.bat' в ЦИКЛЕ закачки"
@rem "реализуется пауза в 9,513 секунды"
@rem "От цикла к циклу величина паузы изменяется случайным"
@rem "образом в диапазоне от 8 до 16 секунд"
@rem
@rem "2. Файл 'dwnl-1-IZ.bat' служит для закачки html-"
@rem "и pdf-описания патента на изобретение"
@rem "по заданному номеру патента"
@rem
@rem --------------------------------------------
@rem "Начало ЦИКЛА"
@rem
FOR /F "delims=" %%i IN (temp\zun04) DO (
echo ‡ Є зЄ Ї вҐв ђ” N
@echo %%i
nircmd wait 1500
echo %%i>patnum.txt
sed q temp\zuz01
sed "s/^\(.*\)$/\@Echo off##cls##nircmd wait \1\r/" <temp\zuz01 >temp\zuz02
sed "s/##/\r\n/g" <temp\zuz02 >tpause1.bat
CALL tpause1.bat
CALL dwnl-1-IZ.bat
sed 1d temp\zuz03
sed "s/$/\r/" <temp\zuz03 >rndm_8-15s.txt
)
@rem "Окончание ЦИКЛА"
@rem
@rem ----------------------------------------------------------
if not exist _ready\html mkdir _ready\html
if not exist _ready\pdfs mkdir _ready\pdfs
@rem
@rem "Перенос закачанных html-файлов в папку '_ready\html'"
if exist html\RU*.html move /Y html\RU*.html _ready\html >null
@rem
@rem "Перенос закачанных pdf-файлов в папку '_ready\pdfs'"
if exist pdfs\RU*.pdf move /Y pdfs\RU*.pdf _ready\pdfs >null
@rem
@rem ----------------------------------------------------------
@rem "Удаление вспомогательных и промежуточных файлов"
if exist null del /Q null
if exist rndm_8-15s.txt del /Q rndm_8-15s.txt
if exist tpause1.bat del /Q tpause1.bat
if exist temp\temp* del /Q temp\temp*
if exist temp\zun* del /Q temp\zun*
if exist temp\zuz* del /Q temp\zuz*
if exist tmps\*.* del /Q tmps\*.*
@rem
@rem ----------------------------------------------------------
@rem "Выдача звукового сигнала об окончании закачки"
nircmd.exe beep 200 100
nircmd.exe beep 100 50
nircmd.exe beep 200 100
@rem
@rem "Формирование окна с сообщением"
@rem "Закачка патентов на изобретения завершена"
wbox /WW=220 /TL=2 /TM=3 /BG=#FFECB7 "‚Ё¬ ЁҐ!" "‡ Є зЄ Ї вҐв®ў Ё§®ЎаҐвҐЁп § ўҐаиҐ ." "OK"
@rem
@rem ----------------------------------------------------------
:END
Bat-файл “dwnl-1-IZ.bat” является основным элементом файла “2_stream-IZ.bat” и служит для закачки htm- и pdf-описания одного патента на изобретение, номер которого записан в файле “patnum.txt”.
Рис. 16. Bat-файл для закачки html- и pdf-описания одного патента на изобретение
Для организации поточной закачки описаний патентов на полезные модели (номера которых записаны в текстовом файле “rupm-nums.txt” в папке “nums”) используется bat-файл “3_stream-PM.bat”.
Рис. 17. Bat-файл для поточной закачки описаний патентов на полезные модели
Листинг файла “3_stream-PM.bat”
@Echo off
cls
@rem
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Поточная закачка html- и pdf-описаний патентов РФ"
@rem "на полезные модели"
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem "Вход: файл 'rupm-nums.txt' в папке 'nums' с номерами патентов"
@rem "на полезные модели со строками вида"
@rem 183565
@rem 107369
@rem ...
@rem
@rem "Выход 1: html-описания в папке '_ready\html' вида RU183565.html"
@rem "Выход 2: pdf-описания в папке '_ready\pdfs' вида RU183565.pdf"
@rem
@rem ----------------------------------------------------------
@rem "Генерируем файл со случайными числами от 8000 до 15999"
@rem "Формирование файла 'rndm_8-15s.txt' c последовательностью"
@rem "случайных чисел от 8000 до 15999"
@rem
CALL mkrndms.bat
@rem
@rem "Удаляем из файла 'rupm-nums.txt' все символы, кроме цифр"
copy nums\rupm-nums.txt temp\zun01 >null
tr -d " [:alpha:][:punct:]#" <temp\zun01 >temp\zun02
@rem
@rem "Удаляем пустые строки"
grep "." <temp\zun02 >temp\zun03
@rem
@rem "Сортируем строки, удаляем дубликаты (при необходимости)"
cmsort /D temp\zun03 temp\zun04
cls
@rem
@rem ----------------------------------------------------------
@rem "ЦИКЛ поточной закачки описаний патентов РФ"
@rem "на полезные модели"
@rem
@rem --------------------------------------------
@rem "Используемые bat-файлы: 'tpause1.bat' и 'dwnl-1-PM.bat'"
@rem
@rem "1. Файл 'tpause1.bat' состоит из 3-х строк вида, например"
@rem @Echo off
@rem cls
@rem nircmd wait 11238
@rem
@rem "При выполнении такого 'tpause1.bat' в ЦИКЛЕ закачки"
@rem "реализуется пауза в 11,238 секунды"
@rem "От цикла к циклу величина паузы изменяется случайным"
@rem "образом в диапазоне от 8 до 16 секунд"
@rem
@rem "2. Файл 'dwnl-1-PM.bat' служит для закачки html-"
@rem "и pdf-описания патента на полезную модель"
@rem "по заданному номеру патента"
@rem
@rem --------------------------------------------
@rem "Начало ЦИКЛА"
@rem
FOR /F "delims=" %%i IN (temp\zun04) DO (
echo ‡ Є зЄ Ї вҐв ђ” N
@echo %%i
nircmd wait 1500
echo %%i>patnum.txt
sed q temp\zuz01
sed "s/^\(.*\)$/\@Echo off##cls##nircmd wait \1\r/" <temp\zuz01 >temp\zuz02
sed "s/##/\r\n/g" <temp\zuz02 >tpause1.bat
CALL tpause1.bat
CALL dwnl-1-PM.bat
sed 1d temp\zuz03
sed "s/$/\r/" <temp\zuz03 >rndm_8-15s.txt
)
@rem "Окончание ЦИКЛА"
@rem
@rem ----------------------------------------------------------
if not exist _ready\html mkdir _ready\html
if not exist _ready\pdfs mkdir _ready\pdfs
@rem
@rem "Перенос закачанных html-файлов в папку '_ready\html'"
if exist html\RU*.html move /Y html\RU*.html _ready\html >null
@rem
@rem "Перенос закачанных pdf-файлов в папку '_ready\pdfs'"
if exist pdfs\RU*.pdf move /Y pdfs\RU*.pdf _ready\pdfs >null
@rem
@rem ----------------------------------------------------------
@rem "Удаление вспомогательных и промежуточных файлов"
if exist null del /Q null
if exist rndm_8-15s.txt del /Q rndm_8-15s.txt
if exist tpause1.bat del /Q tpause1.bat
if exist temp\temp* del /Q temp\temp*
if exist temp\zun* del /Q temp\zun*
if exist temp\zuz* del /Q temp\zuz*
if exist tmps\*.* del /Q tmps\*.*
@rem
@rem ----------------------------------------------------------
@rem "Выдача звукового сигнала об окончании закачки"
nircmd.exe beep 200 100
nircmd.exe beep 100 50
nircmd.exe beep 200 100
@rem
@rem "Формирование окна с сообщением"
@rem "Закачка патентов на полезные модели завершена"
wbox /WW=220 /TL=2 /TM=3 /BG=#CFFFCF "‚Ё¬ ЁҐ!" "‡ Є зЄ Ї вҐв®ў Ї®«Ґ§лҐ ¬®¤Ґ«Ё § ўҐаиҐ ." "OK"
@rem
@rem ----------------------------------------------------------
:END
Bat-файл “dwnl-1-PM.bat” является основным элементом файла “3_stream-PM.bat” и служит для закачки htm- и pdf-описания одного патента на полезную модель, номер которого записан в файле “patnum.txt”.
Рис. 18. Bat-файл для закачки html- и pdf-описания одного патента на полезную модель
Bat-файл “mkrndms.bat” предназначен для генерации последовательности случайных целых чисел от 8000 до 15999. Эти числа совместно с утилитой “nircmd.exe” используются для того, чтобы задавать временну́ю паузу между закачками из БД ФИПС.
Рис. 19. Bat-файл для формирования случайных целых чисел от 8000 до 15999
Так, например, запись вида nircmd wait 9315 в командной строке задаёт паузу 9,315 секунды при выполнении команд в bat-файле. Таким образом, закачка описаний российских патентов в представленной конфигурации производится с временно́й задержкой, изменяющейся случайным образом от 8 до 16 секунд.
Указанный интервал 8÷16 сек был задан мной волюнтаристски, или, если угодно, подобран эмпирически. А сама “пауза” обязана своим появление тому, что несколько лет назад на работе мои ip-адреса были пару раз заблокированы со стороны сервера Роспатента, когда я начинал качать файлы практически без “отдыха”, на “максимальной скорости”.
Замечу, что за все годы6)Начиная с 2008 года (см. публикацию) и по сю пору. интенсивного “тыринга” полнотекстовых описаний (html, pdf) американских патентов на изобретения из БД USPTO я ни разу не “удостоился” блокирования со стороны супостатов, хотя средняя “скорость” закачки составляла примерно 1000 патентов США в час. По-видимому, американцы руководствуются принципом, который в своё время изложил мой уже бывший покойный научный руководитель: “У кого много, тому не жалко”.
Листинг файла “mkrndms.bat”
@Echo off
cls
@rem
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Формирование файла 'rndm_8-15s.txt' "
@rem "c последовательностью случайных чисел от 8000 до 15999 "
@rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem "Выход: файл 'rndm_8-15s.txt'"
@rem
@rem "Предварительная очистка"
if exist rndm_8-15s.txt del /Q rndm_8-15s.txt
if exist rndm\rndms1000.txt del /Q rndm\rndms1000.txt
@rem
@rem "Переход в папку 'rndm'"
CD rndm
@rem
@rem "Генерация 1000 случайных чисел от 1 до 32767"
@rem "путём запуска исполняемого файла 'rndm1000.exe'"
start "" rndm1000.exe
@rem
@rem "Обратный переход в корневую папку"
CD..
@rem
@rem "Пауза 0,5 секунды"
nircmd wait 500
@rem
@rem "Копирование файла с 1000 случайных чисел от 1 до 32767"
@rem "из папки 'rndm' в корневую папку"
copy rndm\rndms1000.txt >null
@rem
@rem "Формирование случайных чисел от 8000 до 15999 путём"
@rem "удаления чисел от 1 до 7999 и от 16000 до 32767"
sed "/^[0-9]\{4,5\}$/!d" temp\zur01
sed "/^[0-7][0-9]\{3\}$/d" <temp\zur01 >temp\zur02
sed "/^[2-3][0-9]\{4\}$/d" <temp\zur02 >temp\zur03
sed "/^1[6-9][0-9]\{3\}$/d" <temp\zur03 >temp\zur04
@rem
@rem "Формирование файла 'rndm_8-15s.txt' со случайными"
@rem "числами от 8000 до 15999"
sed "s/$/\r/" <temp\zur04 >rndm_8-15s.txt
@rem
@rem "Удаление вспомогательных и промежуточных файлов""
if exist temp\zur* del /Q temp\zur*
if exist rndms1000.txt del /Q rndms1000.txt
if exist null del /Q null
@rem
@rem ----------------------------------------------------------
:END
Послесловие
Особо не надеюсь, что всё вышеописанное пригодится многим. Но, во-первых, благодаря генам покойного бати, я не люблю незавершённых мной дел. А, во-вторых, если рассмотренный выше подход к “раскапыванию” ресурсов ФИПСа позволит даже одному–двум умным аспирантам-технарям сэкономить быстро бегущее время, для меня этого будет достаточно. Страшный дефицит ныне с умными, да толковыми.
Вот и Президент РАН на днях опять посетовал, что уровень студентов очень сильно упал. Ай-я-яй, какая неожиданность, кто бы мог подумать! Российские академические старцы начали прозревать и что-то подозревать?
В очередной раз, по-видимому, в преддверии осенних выборов в Госдуму, начали циркулировать слухи об отмене ЕГЭ. Хотя поговорку “поздно пить боржоми, когда почки в труху” никто не отменял. Причём катастрофические последствия дебильной ЕГЭнизации для страны вряд ли кто-то может оценить в полной мере даже сейчас.
В работе на западные спецслужбы в лице Британского королевского института международных отношений Chatham House, выпустившего русофобский Манифест, сходный со знаменитой речью Черчилля в Фултоне и, по сути, объявляющий России новую холодную войну, замечен очередной сотрудник7)Профессор департамента политической науки факультета социальных наук. Высшей школы экономики в сфере противоестественных наук. Но это-то, зная тамошний контингент рукопожатных русофобов, педофилов, педерастов и полуфашистов, совсем не удивляет. Гораздо необычайнее фамилия этого сотрудника ВШЭ: Петров. Хотя, не исключаю, что это – один из его многочисленных оперативных псевдонимов. Всё-таки какая поразительная способность у отечественных либерастов жрать за счёт государства и открыто .рать ему на голову. Запоздала, ой как запоздала, Российская Федерация со строительством нового Беломорканала…
Я допускаю, что юным девочкам не “в лом” триста раз делать одну и ту же однообразную работу. Ну, а для меня, в силу природной лени и критического возраста, уже трёхкратное повторение рутинных действий, отнимающих бесценное время, навевает тоскливое уныние.
Изначально каждая страница полнотекстового описания патента США была представлена в виде изображения в tif-формате. Лет семь-восемь назад вся (вся, Карл!) база была переведена в pdf-формат.