Pull to refresh

Делаем скриншоты с автоматическим перебрасыванием на поиск изображения в Яндекс/Гугл

Привет, Хабр!

Я достаточно часто делаю скриншоты, чтобы потом искать их в Яндекс/Гугл, и занятие это несколько утомительное: сначала нужно сделать скриншот, потом сохранить (ну или сразу с сохранением тоже достаточно популярная фича среди всяких утилит для скришотов, угу), потом открыть свою любимую поисковую систему, открыть в ней поиск по картинкам, залить картинку, это уже аж 4-5 шагов, что лично меня напрягало.

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

Код для формирования ссылки в яндекс (источник):

base_url = 'https://yandex.ru/images/search'
params = {'rpt': 'imageview', 'format': 'json', 'request': '{"blocks":[{"block":"b-page_type_search-by-image__link"}]}'}

files = {'upfile': ('blob', open(image_path, 'rb'), 'image/jpeg')}
r = requests.post(base_url, params=params, files=files)
query_string = json.loads(r.content)['blocks'][0]['params']['url']
url = base_url + '?' + query_string

Код для формирования ссылки в гугл (его я, возможно, тоже откуда-то взял, не помню точно, хотя последняя строчка как бы намекает, что такое только я мог написать, ну может частично откуда-то :D):

base_url = 'http://www.google.com/searchbyimage/upload'
files = {'encoded_image': (image_path, open(image_path, 'rb')), 'image_content': ''}
r = requests.post(base_url, params=params, files=files)
return r.url.replace("webhp", "search")

На самом деле я не понимаю, почему в ссылке идет webhp, и его приходится реплейсить, но разбираться было лень, ведь работает же…

После этого (ну скорее я просто попутно вдруг заинтересовался, как это сделать), я зарегистрировал вызов скрипта через контекстное меню в Windows Registry, написал даже скрипт, который это делает, и выложил на гитхаб вместе со скриптом, формирующим ссылку.

В общем, вот тут я не знал, что дальше с этим делать, писать свой скриншотер даже если бы я и смог, то все равно, как-то не хотелось, так что я стал гуглить, что может мне вообще нафиг не надо было все это делать, и есть уже готовая утилита. Выяснил, что в lightshot есть возможность после скрина сразу загуглить картинку, но я хотел либо яндекс, либо и яндекс и гугл. Так что стал искать дальше.

И вот тут я нашел ShareX, в котором есть возможность прописать ему действия, выполняющиеся после выполнения скриншота в фактически неограниченных возможностях, потому что это выполнение определенной команды в командной строке. И даже можно сделать так, что они выполняются только при определенном сочетании клавиш.

Так, а сейчас пошагово покажу, как сделать так, чтобы ShareX запускал скрипт после скриншота:

1) В ShareX открываем настройки задач -> действия.
2) Добавляем свое действие «добавить».

В имени пишем что угодно, в пути к файлу пишем путь к python.exe, в аргументах путь к нашему скрипту. Если это мой скрипт (ссылку на гитхаб оставлю в конце), то тут также пишем «yandex» или «google», и в конце %input (путь к файлу). Если это Ваш скрипт, то %input, конечно, все равно пишем, а Ваш скрипт должен будет его принимать.

image

Жмем ок, включаем действие (галочка), если не включилось само.

3) Возвращаемся в главное меню ShareX, нажимаем «горячие клавиши».

4) Добавляем комбинацию, нажимаем на шестеренку. И нажимаем «переопределить задачи после захвата». Тут выбираем «Сохранить изображение в файл», «Выполнить действия» и что еще хотите, у меня еще стоит копирование в буфер и удаление локального файла.

Ну вот и все, и не забудьте комбинацию клавиш саму установить, у меня стоит Ctrl+Y.

Чтобы добавить возможность выполнения разных команд в зависимости от разных комбинаций клавиш можно переопределять список действий для каждой комбинации (шестеренка -> действия -> переопределить действия).

Вообще, ShareX офигенный, причем опенсорсный (на C# написан), + к тому же с темной темой. А еще в нем можно делать видеозапись экрана, говорят, что легковесные видео получаются, хотя мне это, в принципе, редко бывает нужно, просто счел нужным упомянуть после того, как прочитал эту статью.

Ссылки: ShareX, скрипт для генерации ссылок (а также скрипты для создания контекстного меню в Windows)
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.