Тыринг с ФИПСа-2 Уловка компьютерной крысы №13

Уловка компьютерной крысы № 13

Вернусь к тому, с чего начал в предыдущем материале “Тыринг с ФИПСа” – с автоматизации процесса закачки российских патентов из реестров Роспатента (ФИПС). Итак, “Уловка компьютерной крысы № 13” в более подробном изложении…

Уловка Компьютерной крысы № 13

О “тыринге”

Честно говоря, задача автоматической загрузки описаний российских патентов возникает не у всех аспирантов технических специальностей. Повторю в “стотыщпитсотый” раз: если вам нужно скачать несколько (3÷5) описаний патентов, то это леГко делается собственными умелыми ручками, и не займёт у вас много времени.

Однако, бывают ситуации, когда число патентов, которые нужно быстро выдернуть из реестра Роспатента (ФИПС), довольно велико. Например, когда тема диссертации обильно исхожена российскими изобретателями, и нужно оперативно произвести выборку подходящих патентов при написании обзорной Главы или при проведении1)Это, конечно, характерно не для аспирантов, а для молодых учёных, участвующих в НИР. патентных исследований.

Когда много лет назад я (исключительно по службе) в первый раз столкнулся с необходимостью увести из ФИПСа за раз и швидко несколько сотен полнотекстовых описаний патентов РФ на изобретения и полезные модели, то мне пришлось2)Я допускаю, что юным девочкам не “в лом” триста раз делать одну и ту же однообразную работу. Ну, а для меня, в силу природной лени и критического возраста, уже трёхкратное повторение рутинных действий, отнимающих бесценное время, навевает тоскливое уныние. этот процесс автоматизировать подручными средствами.

Читайте также:  Обновление инфо-ленты от 23.05.2018

В базе данных Патентного ведомства США url-ссылка на полнотекстовое описание патента на изобретение в html-формате (только текст) и аналогичные ссылки на страницы патента в pdf-формате (текст, графики, диаграммы, рисунки)3)Изначально каждая страница полнотекстового описания патента США была представлена в виде изображения в tif-формате. Лет семь-восемь назад вся (вся, Карл!) база была переведена в pdf-формат. однозначно привязаны к уникальному номеру патента и, таким образом, могут быть сгенерированы автоматически для последующей независимой друг от друга закачки html- и pdf-описаний.

В отличие от американского ведомства, в открытом реестре Роспатента ссылка на полнотекстовое pdf-описание на изобретение привязана к номеру патента весьма геморроидальным способом и встроена в html-описание. И то, такая ссылка появилась в html-описаниях только с 2003 года. Причём структура этой ссылки менялась за эти годы пару раз точно. Я не думаю, что это было сделано специально, чтобы воспрепятствовать поточному уводу информации из ФИПСа. Вероятнее всего, это – стандартные кривые руки тех, кто лепил эту систему.

Читайте также:  Рентген для научного руководителя

Таким образом, для того, чтобы в автоматическом режиме скачивать pdf-описания патентов из реестра ФИПС, нужно предварительно скачивать их html-описания и извлекать из них нужные url-ссылки на pdf-файлы. Вот, я и говорю: геморрой.

Посмотреть, как всё это работает “вживую”, можно на видео (480х270) буквально строкой ниже, либо перейти по ссылке на youtube и посмотреть “киношечку” в разрешении 1280х720.

video
play-rounded-fill

Между прочим, для тех аспирантов, кто умеет “в программирование” гораздо лучше меня, не составит труда наваять свою собственную программу, которая будет автоматически загружать html-описания патентов из БД Роспатента (ФИПС). Единственное, что для этого нужно знать, – это структура url-ссылок на изобретение и полезную модель.

Ниже приведены ссылки на html-описания патента на изобретение (№ 2543358)

https://www1.fips.ru/registers-doc-view/fips_servlet?DB=RUPAT&DocNumber=2543358&TypeFile=html

и патента на полезную модель (№ 96664).

https://www1.fips.ru/registers-doc-view/fips_servlet?DB=RUPM&DocNumber=96664&TypeFile=html

Заменяя в цикле эти номера, вы сможете “тырить” описания российских патентов поточно, без личного участия. Экономя, таким образом, своё драгоценное время.

Но те, кто не владеет (ай-я-яй!) навыками программирования или ему некогда этим заниматься, могут воспользоваться моим “рукоделием”.

Для этого вам нужно будет скачать архивный файл “DWNLFIPS.zip” (3909352 байт).

Скачать файл

Замечу, что весь этот “самопал” без нареканий работает в университете и дома на моих рабочих “лошадках” – Windows 7 и Windows XP. Помимо этого, работоспособность джентльменского набора для “тырения” была проверена на “чужих” компьютерах с Windows 8/10.

Начало

Скачав файл “DWNLFIPS.zip”, разархивируйте его, например, на диск C:\ в папку “DWNLFIPS”. Структура и содержимое папки показано на рисунке ниже.

Структура папки “DWNLFIPS” и файлы

Рис. 1. Структура папки “DWNLFIPS” и файлы

Назначение папок

В папке “nums”

Папка nums (с номерами патентов)

Рис. 2. Папка “nums” с файлами, содержащими номера патентов

содержится текстовый файл “ruiz-nums.txt”4)Столбец чисел вида:
2743027
2211458
2461018
с номерами патентов на изобретения (IZ),

Текстовый файл “ruis-nums.txt” с номерами патентов на изобретения

Рис. 3. Текстовый файл “ruis-nums.txt” с номерами патентов на изобретения

и “rupm-nums.txt”5)Столбец чисел вида:
96664
183565
136192
с номерами патентов на полезные модели (PM), соответственно.

Текстовый файл “rupm-nums.txt” с номерами патентов на полезные модели

Рис. 4. Текстовый файл “rupm-nums.txt” с номерами патентов на полезные модели

В папки “html” и “pdfs” закачиваются html- и pdf-описания патентов при выполнении цикла закачки описаний.

Папки для текущей закачки html- и pdf-описаний патентов

Рис. 5. Папки для текущей закачки html- и pdf-описаний патентов

В папке “rndm”

Папка, в которой генерируются случайные целые числа от 1 до 32767

Рис. 6. Папка, в которой генерируются случайные целые числа от 1 до 32767

с помощью исполняемого файла “rndm1000.exe”

Исполняемый файл для генерации тысячи случайных целых чисел от 1 до 32767

Рис. 7. Исполняемый файл “rndm1000.exe” с необходимыми dll-библиотеками

генерируется текстовый файл “rndms1000.txt” с последовательностью из тысячи случайных целых чисел от 1 до 32767. Затем из этого файла производится выборка случайных чисел в интервале от 8000 до 15999.

Формирование случайных чисел – “rndm1000.exe”

  • Подход к генерации неповторяющихся случайных чисел был взят из материала “Урок № 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”.

Папки, в которые перемещаются закачанные html- и pdf-описания патентов

Рис. 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) – утилита командной строки для поиска определённого текста по файлу или файлам (в данном случае используется для удаления пустых строк в файлах);
  • nircmd.exe (v.2.65) – многофункциональная утилита командной строки;
  • sed.exe (v.4.1.5) – потоковый текстовый редактор командной строки (вместе с dll-библиотеками “libiconv2.dll”, “libintl3.dll”);
  • tr.exe (версия 1999 г.) – утилита командной строки для символьного преобразования;
  • wbox.exe (v.1.11) – утилита вывода сообщения;

Ещё один исполняемый файл (“rndm1000.exe”) находится в папке “rndm” (см. рис. 7).

Листинги bat-файлов

Ниже приведены листинги (в кодировке cp1251) bat-файлов, используемых при закачке полнотекстовых описаний патентов РФ.

Bat-файл “_clean-all.bat” предназначен для тотальной очистки папок (“html”, “nums”, “pdfs”, “rndm”, “temp”, “tmps”) от вспомогательных и промежуточных файлов. После его запуска удаляются все файлы в указанных папках и промежуточные файлы в корне. При этом в папке “nums” “обнуляются” текстовые файлы “ruiz-nums.txt” и “rupm-nums.txt” с номерами патентов, подлежащих загрузке.

Bat-файл для очистки папок, промежуточных файлов, результатов поиска

Рис. 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-файлов. Этот файл предназначен для удаления предыдущих результатов закачки описаний патентов.

Bat-файл для удаления html- и pdf-файлов в папке ''_ready''

Рис. 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” предназначен для формирования списков номеров патентов из скопированных в буфер памяти результатов поиска в БД ФИПС.

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”.

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”.

Bat-файл для закачки html- и pdf-описания одного патента на изобретение

Рис. 16. Bat-файл для закачки html- и pdf-описания одного патента на изобретение

Листинг файла “dwnl-1-IZ.bat”
@Echo off
cls
@rem 
@rem "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Загрузка html-описания и pdf-описания патента           "
@rem "на изобретение, номер которого записан                  "
@rem "в файле 'patnum.txt'                                    "
@rem "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem 
if exist tmps\temp.html del /Q tmps\temp.html
@rem 
sed "s/^\(.*\)$/\x22https:\/\/www1\.fips\.ru\/registers-doc-view\/fips_servlet?DB=RUPAT\&DocNumber=\1\&TypeFile=html\x22/" temp\zuv01
sed "s/^/\@Echo off##cls##curl -k -o tmps\\temp\.html /" <temp\zuv01 >temp\zuv02
sed "s/##/\r\n/g" <temp\zuv02 >temp\zuv03
sed "s/$/\r/" <temp\zuv03 >ztemp1.bat
@rem 
@rem "Загрузка html-описания патента в папку 'tmps' как 'temp.html'"
@rem curl -k -o "tmps\temp.html" "https://www1.fips.ru/registers-doc-view/fips_servlet?DB=RUPAT&DocNumber=2543358&TypeFile=html"
echo Ќ з « бм § Є зЄ  html-®ЇЁб ­Ёп Ї вҐ­в ...
nircmd wait 1500
CALL ztemp1.bat
cls
echo ‡ Є зЄ  html-д ©«  § ўҐа襭 .
nircmd wait 1500
@rem 
@rem --------------------------------------------
@rem "СЛУЧАЙ: Документ с заданным номером отсутствует"
@rem "Удаляем файл tmps\temp.html с размером меньше 50 байт"
@rem 
set Size=50
set Files=tmps\temp.html
for %%F in (%Files%) do if /i %%~zF LEQ %Size% del /f %%F
@rem 
if not exist tmps\temp.html goto CLEAN
@rem 
sed "s/^\t\t*//" <tmps\temp.html >temp\zuh01
sed "s/\t\t*/ /g" <temp\zuh01 >temp\zuh02
sed "s/  */ /g" <temp\zuh02 >temp\zuh03
sed "s/$/\r/" <temp\zuh03 >temp\zuh04
sed "s/href=\x22\/Archive/href=\x22https:\/\/www1\.fips\.ru\/Archive/g" <temp\zuh04 >temp\zuh05
sed "s/img src=\x22\/Archive/img src=\x22https:\/\/new\.fips\.ru\/Archive/g" <temp\zuh05 >temp\zuh06
sed "s/img src=\x22\/ofpstorage\//img src=\x22https:\/\/www1\.fips\.ru\/ofpstorage\//g" <temp\zuh06 >temp\zuh07
sed "s/$/\r/" <temp\zuh07 >tmps\tempc.html
@rem 
@rem --------------------------------------------
@rem "Копирование html-файла 'tmps\tempc.html' в папку html как 'RUNNNNNNN.html'"
@rem copy /Y tmps\tempc.html html\RU2516276.html
sed "s/^\(.*\)$/copy \/Y tmps\\tempc\.html html\\RU\1\.html >null\r/" ztemp3.bat
@rem 
CALL ztemp3.bat
cls
@rem 
@rem ----------------------------------------------------------
@rem "Примеры ссылок на pdf-описание патента в его закачанном html-описании"
@rem href="http://new.fips.ru/Archive/PAT/2012FULL/2012.01.27/DOC/RUNWC2/000/000/002/211/458/document.pdf" target="_blank">27.01.2012
@rem href="http://new.fips.ru/Archive/PAT/2012FULL/2012.09.10/DOC/RUNWC2/000/000/002/461/018/DOCUMENT.PDF" target="_blank">10.09.2012
@rem href="/ofpstorage/Doc/IZPM/RUNWC1/000/000/002/743/027/%D0%98%D0%97-02743027-00001/document.pdf" target="_blank">12.02.2021
@rem 
@rem "Предварительная очистка папки 'tmps'"
if exist tmps\temp.pdf del /Q tmps\temp.pdf
@rem 
@rem "Извлекаем из html-описания строку с url-адресом pdf-описания"
@rem "В этой строке должен быть шаблон" 
@rem "'DOCUMENT.PDF.*target.*_blank'"
@rem "или"
@rem "'document.pdf.*target.*_blank'"
@rem "Утилита 'grep' извлекает строку независимо от регистра"
@rem 
grep "document.pdf.*target.*_blank" -i <tmps\tempc.html >temp\zuv04
@rem 
@rem "Если такая строка ЕСТЬ, то размер файла 'temp\zuv04' больше нуля"
@rem "Если такой строки НЕТ, то размер файла 'temp\zuv04' равен нулю"
@rem 
@rem "Пытаемся удалить 'нулевой' файл 'temp\zuv04'"
@rem 
set Size=0
set Files=temp\zuv04
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem 
@rem "Если файла 'temp\zuv04' НЕТ, то значит в html-описании"
@rem "отсутствует ссылка на pdf-описание патента"
@rem "В этом случае ОБХОДИМ обработку url-ссылки на pdf-описание"
@rem "и, естественно, закачку pdf-файла"
@rem 
if not exist temp\zuv04 goto CLEAN
@rem 
@rem --------------------------------------------
@rem "ОТРАБОТКА случая, когда url-ссылка на pdf-файл найдена"
@rem 
@rem "Если файл 'temp\zuv04' ЕСТЬ, то формируем bat-файл для закачки"
@rem "pdf-описания патента"
@rem 
@rem "Поскольку в ссылках встречаются названия искомого файла"
@rem "в виде 'DOCUMENT.PDF'"
@rem "то ЗАМЕНЯЕМ 'DOCUMENT.PDF' на 'document.pdf'"
@rem 
sed "s/\.PDF/\.pdf/g" <temp\zuv04 >temp\zuv04-1
sed "s/DOCUMENT/document/g" <temp\zuv04-1 >temp\zuv04-2
@rem 
@rem "Выделяем строку, содержащую выражение типа" 
@rem href=.*document.pdf".*target.*
sed "s/^.*href=\x22\(.*document\.pdf\)\x22 target.*$/\1\r/" <temp\zuv04-2 >temp\zuv05
@rem 
@rem "Поскольку в html-файле может быть несколько ссылок на 'document.pdf',"
@rem "то выводим только первую строку файла 'temp\zuv05'"
sed 1q <temp\zuv05 >temp\zuv05-0
@rem 
@rem --------------------------------------------
@rem "ОТРАБОТКА случая ссылки на pdf-описание вида"
@rem /ofpstorage/Doc/IZPM/RUNWC1/000/000/002/643/491/%D0%98%D0%97-02643491-00001/document.pdf
@rem 
sed "/\/ofpstorage\//!d" <temp\zuv05-0 >temp\zuv05-1 
@rem 
@rem "Пытаемся удалить файл 'temp\zuv05-1' нулевого размера"
set Size=0
set Files=temp\zuv05-1
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem 
@rem "Если файла 'temp\zuv05-1' НЕТ, то ПЕРЕХОДИМ к метке 'Metka2'"
if not exist temp\zuv05-1 goto Metka1
@rem 
@rem "Файл 'temp\zuv05-1' ЕСТЬ"
@rem "Заменяем 'href=/ofpstorage/' на 'https://www1.fips.ru/ofpstorage/'"
@rem "так, чтобы ссылка"
@rem /ofpstorage/Doc/IZPM/RUNWC1/000/000/002/643/491/%D0%98%D0%97-02643491-00001/document.pdf
@rem "имела вид"
@rem https://www1.fips.ru/ofpstorage/Doc/IZPM/RUNWC1/000/000/002/643/491/%D0%98%D0%97-02643491-00001/document.pdf
@rem 
sed "s/\/ofpstorage\//https:\/\/www1\.fips\.ru\/ofpstorage\//" <temp\zuv05-1 >temp\zuv05-2
sed "s/$/\r/" <temp\zuv05-2 >temp\zuv06
goto Metka2
@rem 
:Metka1
@rem "ОТРАБОТКА случая ссылки на pdf-описание вида"
@rem http://new.fips.ru/Archive/PAT/2007FULL/2007.09.20/DOC/RUNWC1/000/000/002/306/159/DOCUMENT.PDF
@rem "Заменяем 'http://' на 'https://'"
sed "s/http:\/\//https:\/\//" <temp\zuv05-0 >temp\zuv05-3
sed "s/$/\r/" <temp\zuv05-3 >temp\zuv06
@rem 
:Metka2
sed "s/\x25/\x25\x25/g" <temp\zuv06 >temp\zuv07
sed "s/^/\@Echo off##cls##curl -k -o tmps\\temp\.pdf \x22/" <temp\zuv07 >temp\zuv08
sed "s/$/\x22\r/" <temp\zuv08 >temp\zuv09
sed "s/##/\r\n/g" <temp\zuv09 >ztemp2.bat
@rem 
@rem "Закачка pdf-описания патента на изобретение"
@rem curl -k -o tmps\temp.pdf "https://new.fips.ru/Archive/PAT/2014FULL/2014.05.20/DOC/RUNWC1/000/000/002/516/276/DOCUMENT.PDF"
@rem curl -k -o tmps\temp.pdf "https://www1.fips.ru/ofpstorage/Doc/IZPM/RUNWC1/000/000/002/643/491/%%D0%%98%%D0%%97-02643491-00001/document.pdf"
@rem 
echo Ќ з « бм § Є зЄ  pdf-®ЇЁб ­Ёп Ї вҐ­в ...
nircmd wait 1500
CALL ztemp2.bat
cls
@rem 
if not exist tmps\temp.pdf goto Metka3
@rem 
@rem 
echo ‡ Є зЄ  pdf-д ©«  § ўҐа襭 .
nircmd wait 1500
@rem 
@rem "'Нормализация' pdf-файла"
BeCyPDFMetaEdit "tmps\temp.pdf" -PL 1 -PM 3 -T "FIPS" -S "Patent" -A "PDF"
cls
@rem 
goto Metka4
@rem 
:Metka3
echo ‚Ќ€ЊЂЌ€…!
echo ‡ Є зЄ  pdf-д ©«  ­Ґ г¤ « бм 
echo Ё«Ё Ї вҐ­в ў pdf-д®а¬ вҐ ®вбгвбвўгҐв.
nircmd wait 2000
cls
@rem 
goto CLEAN
@rem 
:Metka4
@rem ----------------------------------------------------------
@rem "Копирование pdf-файла 'tmps\temp.pdf' в папку pdfs как 'RUNNNNNNN.pdf'"
@rem copy /Y tmps\temp.pdf html\RU2516276.pdf
@rem 
sed "s/^\(.*\)$/copy \/Y tmps\\temp\.pdf pdfs\\RU\1\.pdf >null\r/" ztemp4.bat
@rem 
CALL ztemp4.bat
cls
@rem ----------------------------------------------------------
:CLEAN
@rem 
if exist null del /Q null
if exist patnum.txt del /Q patnum.txt
@rem 
if exist ztemp*.bat del /Q ztemp*.bat
if exist temp\zuh* del /Q temp\zuh*
if exist temp\zuv* del /Q temp\zuv*
@rem 
:END

Для организации поточной закачки описаний патентов на полезные модели (номера которых записаны в текстовом файле “rupm-nums.txt” в папке “nums”) используется bat-файл “3_stream-PM.bat”.

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”.

Bat-файл для закачки html- и pdf-описания одного патента на полезную модель

Рис. 18. Bat-файл для закачки html- и pdf-описания одного патента на полезную модель

Листинг файла “dwnl-1-PM.bat”
@Echo off
cls
@rem 
@rem "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem "Загрузка html-описания и pdf-описания патента           "
@rem "на полезную модель, номер которого записан              "
@rem "в файле 'patnum.txt'                                    "
@rem "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem 
if exist tmps\temp.html del /Q tmps\temp.html
@rem 
sed "s/^\(.*\)$/\x22https:\/\/www1\.fips\.ru\/registers-doc-view\/fips_servlet?DB=RUPM\&DocNumber=\1\&TypeFile=html\x22/" temp\zuv01
sed "s/^/\@Echo off##cls##curl -k -o tmps\\temp\.html /" <temp\zuv01 >temp\zuv02
sed "s/##/\r\n/g" <temp\zuv02 >temp\zuv03
sed "s/$/\r/" <temp\zuv03 >ztemp1.bat
@rem 
@rem "Загрузка html-описания патента в папку 'tmps' как 'temp.html'"
@rem curl -k -o "tmps\temp.html" "https://www1.fips.ru/registers-doc-view/fips_servlet?DB=RUPM&DocNumber=96664&TypeFile=html"
echo Ќ з « бм § Є зЄ  html-®ЇЁб ­Ёп Ї вҐ­в ...
nircmd wait 1500
CALL ztemp1.bat
cls
echo ‡ Є зЄ  html-д ©«  § ўҐа襭 .
nircmd wait 1500
@rem 
@rem --------------------------------------------
@rem "СЛУЧАЙ: Документ с заданным номером отсутствует"
@rem "Удаляем файл tmps\temp.html с размером меньше 50 байт"
@rem 
set Size=50
set Files=tmps\temp.html
for %%F in (%Files%) do if /i %%~zF LEQ %Size% del /f %%F
@rem 
if not exist tmps\temp.html goto CLEAN
@rem 
sed "s/^\t\t*//" <tmps\temp.html >temp\zuh01
sed "s/\t\t*/ /g" <temp\zuh01 >temp\zuh02
sed "s/  */ /g" <temp\zuh02 >temp\zuh03
sed "s/$/\r/" <temp\zuh03 >temp\zuh04
sed "s/href=\x22\/Archive/href=\x22https:\/\/www1\.fips\.ru\/Archive/g" <temp\zuh04 >temp\zuh05
sed "s/img src=\x22\/Archive/img src=\x22https:\/\/new\.fips\.ru\/Archive/g" <temp\zuh05 >temp\zuh06
sed "s/img src=\x22\/ofpstorage\//img src=\x22https:\/\/www1\.fips\.ru\/ofpstorage\//g" <temp\zuh06 >temp\zuh07
sed "s/$/\r/" <temp\zuh07 >tmps\tempc.html
@rem 
@rem --------------------------------------------
@rem "Копирование html-файла 'tmps\tempc.html' в папку html как 'RUNNNNNNN.html'"
@rem copy /Y tmps\tempc.html html\RU2516276.html
sed "s/^\(.*\)$/copy \/Y tmps\\tempc\.html html\\RU\1\.html >null\r/" ztemp3.bat
@rem 
CALL ztemp3.bat
cls
@rem 
@rem ----------------------------------------------------------
@rem "Примеры ссылок на pdf-описание патента в его закачанном html-описании"
@rem href="http://new.fips.ru/Archive/PAT/2012FULL/2012.01.27/DOC/RUNWC2/000/000/002/211/458/document.pdf" target="_blank">27.01.2012
@rem href="/ofpstorage/Doc/IZPM/RUNWU1/000/000/000/171/456/%D0%9F%D0%9C-00171456-00001/document.pdf" target="_blank">01.06.2017
@rem 
@rem "Предварительная очистка папки 'tmps'"
if exist tmps\temp.pdf del /Q tmps\temp.pdf
@rem 
@rem "Извлекаем из html-описания строку с url-адресом pdf-описания"
@rem "В этой строке должен быть шаблон" 
@rem "'DOCUMENT.PDF.*target.*_blank'"
@rem "или"
@rem "'document.pdf.*target.*_blank'"
@rem "Утилита 'grep' извлекает строку независимо от регистра"
@rem 
grep "document.pdf.*target.*_blank" -i <tmps\tempc.html >temp\zuv04
@rem 
@rem "Если такая строка ЕСТЬ, то размер файла 'temp\zuv04' больше нуля"
@rem "Если такой строки НЕТ, то размер файла 'temp\zuv04' равен нулю"
@rem 
@rem "Пытаемся удалить 'нулевой' файл 'temp\zuv04'"
@rem 
set Size=0
set Files=temp\zuv04
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem 
@rem "Если файла 'temp\zuv04' НЕТ, то значит в html-описании"
@rem "отсутствует ссылка на pdf-описание патента"
@rem "В этом случае ОБХОДИМ обработку url-ссылки на pdf-описание"
@rem "и, естественно, закачку pdf-файла"
@rem 
if not exist temp\zuv04 goto CLEAN
@rem 
@rem --------------------------------------------
@rem "ОТРАБОТКА случая, когда url-ссылка на pdf-файл найдена"
@rem 
@rem "Если файл 'temp\zuv04' ЕСТЬ, то формируем bat-файл для закачки"
@rem "pdf-описания патента"
@rem 
@rem "Поскольку в ссылках встречаются названия искомого файла"
@rem "в виде 'DOCUMENT.PDF'"
@rem "то ЗАМЕНЯЕМ 'DOCUMENT.PDF' на 'document.pdf'"
@rem 
sed "s/\.PDF/\.pdf/g" <temp\zuv04 >temp\zuv04-1
sed "s/DOCUMENT/document/g" <temp\zuv04-1 >temp\zuv04-2
@rem 
@rem "Выделяем строку, содержащую выражение типа" 
@rem href=.*document.pdf".*target.*
sed "s/^.*href=\x22\(.*document\.pdf\)\x22 target.*$/\1\r/" <temp\zuv04-2 >temp\zuv05
@rem 
@rem "Поскольку в html-файле может быть несколько ссылок на 'document.pdf',"
@rem "то выводим только первую строку файла 'temp\zuv05'"
sed 1q <temp\zuv05 >temp\zuv05-0
@rem 
@rem --------------------------------------------
@rem "ОТРАБОТКА случая ссылки на pdf-описание вида"
@rem /ofpstorage/Doc/IZPM/RUNWU1/000/000/000/171/456/%D0%9F%D0%9C-00171456-00001/document.pdf
@rem 
sed "/\/ofpstorage\//!d" <temp\zuv05-0 >temp\zuv05-1 
@rem 
@rem "Пытаемся удалить файл 'temp\zuv05-1' нулевого размера"
set Size=0
set Files=temp\zuv05-1
for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
@rem 
@rem "Если файла 'temp\zuv05-1' НЕТ, то ПЕРЕХОДИМ к метке 'Metka2'"
if not exist temp\zuv05-1 goto Metka1
@rem 
@rem "Файл 'temp\zuv05-1' ЕСТЬ"
@rem "Заменяем 'href=/ofpstorage/' на 'https://www1.fips.ru/ofpstorage/'"
@rem "так, чтобы ссылка"
@rem /ofpstorage/Doc/IZPM/RUNWU1/000/000/000/171/456/%D0%9F%D0%9C-00171456-00001/document.pdf
@rem "имела вид"
@rem https://www1.fips.ru/ofpstorage/Doc/IZPM/RUNWU1/000/000/000/171/456/%D0%9F%D0%9C-00171456-00001/document.pdf
@rem 
sed "s/\/ofpstorage\//https:\/\/www1\.fips\.ru\/ofpstorage\//" <temp\zuv05-1 >temp\zuv05-2
sed "s/$/\r/" <temp\zuv05-2 >temp\zuv06
goto Metka2
@rem 
:Metka1
@rem "ОТРАБОТКА случая ссылки на pdf-описание вида"
@rem http://new.fips.ru/Archive/PAT/2007FULL/2007.02.27/DOC/RUNWU1/000/000/000/061/456/DOCUMENT.PDF
@rem "Заменяем 'http://' на 'https://'"
sed "s/http:\/\//https:\/\//" <temp\zuv05-0 >temp\zuv05-3
sed "s/$/\r/" <temp\zuv05-3 >temp\zuv06
@rem 
:Metka2
sed "s/\x25/\x25\x25/g" <temp\zuv06 >temp\zuv07
sed "s/^/\@Echo off##cls##curl -k -o tmps\\temp\.pdf \x22/" <temp\zuv07 >temp\zuv08
sed "s/$/\x22\r/" <temp\zuv08 >temp\zuv09
sed "s/##/\r\n/g" <temp\zuv09 >ztemp2.bat
@rem 
@rem "Закачка pdf-описания патента на полезную модель"
@rem curl -k -o tmps\temp.pdf "https://new.fips.ru/Archive/PAT/2007FULL/2007.02.27/DOC/RUNWU1/000/000/000/061/456/DOCUMENT.PDF"
@rem curl -k -o tmps\temp.pdf "https://www1.fips.ru/ofpstorage/Doc/IZPM/RUNWU1/000/000/000/171/456/%D0%9F%D0%9C-00171456-00001/document.pdf"
@rem 
echo Ќ з « бм § Є зЄ  pdf-®ЇЁб ­Ёп Ї вҐ­в ...
nircmd wait 1500
CALL ztemp2.bat
cls
@rem 
if not exist tmps\temp.pdf goto Metka3
@rem 
@rem 
echo ‡ Є зЄ  pdf-д ©«  § ўҐа襭 .
nircmd wait 1500
@rem 
@rem "'Нормализация' pdf-файла"
BeCyPDFMetaEdit "tmps\temp.pdf" -PL 1 -PM 3 -T "FIPS" -S "Patent" -A "PDF"
cls
@rem 
goto Metka4
@rem 
:Metka3
echo ‚Ќ€ЊЂЌ€…!
echo ‡ Є зЄ  pdf-д ©«  ­Ґ г¤ « бм 
echo Ё«Ё Ї вҐ­в ў pdf-д®а¬ вҐ ®вбгвбвўгҐв.
nircmd wait 2000
cls
@rem 
goto CLEAN
@rem 
:Metka4
@rem ----------------------------------------------------------
@rem "Копирование pdf-файла 'tmps\temp.pdf' в папку pdfs как 'RUNNNNNNN.pdf'"
@rem copy /Y tmps\temp.pdf html\RU2516276.pdf
@rem 
sed "s/^\(.*\)$/copy \/Y tmps\\temp\.pdf pdfs\\RU\1\.pdf >null\r/" ztemp4.bat
@rem 
CALL ztemp4.bat
cls
@rem ----------------------------------------------------------
:CLEAN
@rem 
if exist null del /Q null
if exist patnum.txt del /Q patnum.txt
@rem 
if exist ztemp*.bat del /Q ztemp*.bat
if exist temp\zuh* del /Q temp\zuh*
if exist temp\zuv* del /Q temp\zuv*
@rem 
:END

Bat-файл “mkrndms.bat” предназначен для генерации последовательности случайных целых чисел от 8000 до 15999. Эти числа совместно с утилитой “nircmd.exe” используются для того, чтобы задавать временну́ю паузу между закачками из БД ФИПС.

Bat-файл для формирования случайных целых чисел от 8000 до 15999

Рис. 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)Профессор департамента политической науки факультета социальных наук. Высшей школы экономики в сфере противоестественных наук. Но это-то, зная тамошний контингент рукопожатных русофобов, педофилов, педерастов и полуфашистов, совсем не удивляет. Гораздо необычайнее фамилия этого сотрудника ВШЭ: Петров. Хотя, не исключаю, что это – один из его многочисленных оперативных псевдонимов. Всё-таки какая поразительная способность у отечественных либерастов жрать за счёт государства и открыто .рать ему на голову. Запоздала, ой как запоздала, Российская Федерация со строительством нового Беломорканала…

Сноски

1 Это, конечно, характерно не для аспирантов, а для молодых учёных, участвующих в НИР.
2 Я допускаю, что юным девочкам не “в лом” триста раз делать одну и ту же однообразную работу. Ну, а для меня, в силу природной лени и критического возраста, уже трёхкратное повторение рутинных действий, отнимающих бесценное время, навевает тоскливое уныние.
3 Изначально каждая страница полнотекстового описания патента США была представлена в виде изображения в tif-формате. Лет семь-восемь назад вся (вся, Карл!) база была переведена в pdf-формат.
4 Столбец чисел вида:
2743027
2211458
2461018
5 Столбец чисел вида:
96664
183565
136192
6 Начиная с 2008 года (см. публикацию) и по сю пору.
7 Профессор департамента политической науки факультета социальных наук.
Яндекс.Метрика Hide picture