Как стать автором
Обновить

Комментарии 21

А ещё есть функция gd `imagegrabscreen()`, что позволит избавиться от одного системного вызова.
Согласен с автором — PHP давно перестал течь, а с 7 версии и производительность подтянули, так что вполне успешно может использоваться вне рамок веба.
imagegrabscreen только для Windows
Сейчас протестирую на linux, да она не работает в linux. Но он захватывает весь экран я так понимаю. А scrot даёт выбрать область захвата мышкой.
Так в манах черным по белому:
Note:

This function is only available on Windows
Класс Request, метод getOauthLink – у Вас в коде зашит client_id. Неплохо бы его вынести в конфигурационный файл.
Из начально было так, но из за соображения того что есть лишний какой то пункт в конфиге, который навряд ли кто то будет заполнять, я решил его просто прописать(хотя да некий хардкод, но он не так принципиален).
По Вашей логике и токен не нужен в конфигурационном файле. Вообще печально, что Вы так думаете…
Токен как раз в конфигурации находиться, так как он меняется от клиента к клиенту, я опять повторяюсь вынести можно и может даже нужно. Но логика была проста скачав проэкт, пользователь получает токен пишет его в конфиг и копирует конфиг в домашнюю директорию, в другом случае пользователю надо сначала скопировать только потом получить токен, и позже вставить его в конфиг. Что добавляет ещё один не очевидный шаг для инсталяции.
Многие люди считают что php подходит только для разработки сайтиков, и никак не может быть использован, в других областях применения языков программирования, для создания программ
Ну, вообще-то между «подходит» и «может быть использован» огромная пропасть для адекватных людей, стоящих перед выбором инструмента. Любой язык (с несущественными оговорками) можно использовать для решения любой задачи. А вот «подходит» — это отдельный разговор совсем.
Вы мне только объясните пожалуйста — а почему был выбран именно php? Тем более что для непосредственного снятия скриншота вообще системная утилита вызывается… или вы либу для работы с апи яндекса только под php нашли?
Я не против php, у меня у самого проект на нём написан, ибо когда начинал, кроме него вообще ничего не мог и не знал, а сейчас переписывать всё это уже не решусь, по этому мне просто интересны аргументы выбора языка, ибо скрипт из 20 строк такой, можно написать на любом ЯП с помощью гугла за 15 минут…
Можно и какой то подойдёт безусловно лучше чем php. Но в этом то и суть моей статьи что всё таки php можно рассматривать и с точки зрения «системного программирования» (тут я имею ввиду системных скриптов и приложений) а не только как ЯП для создания сайтов.
Пользовательские скрипты != системное программирование.
И да, в данном случае это именно пользовательский скрипт.
Да замечание верное на счёт терминологии, постараюсь учесть в будущем… Спасибо.

Мне вспоминается притча Мастер Фу и десять тысяч строк кода.
На bash это можно сделать вот так:


AUTH='USER:PASSWORD'
FILE=$(date +'%Y_%m_%d_%H_%M_%S_screen.png')
XML='<propertyupdate xmlns="DAV:"><set><prop><public_url xmlns="urn:yandex:disk:meta">true</public_url></prop></set></propertyupdate>'

scrot -s "/tmp/$FILE"
curl -s --user "$AUTH" -T "/tmp/$FILE" -X PUT "https://webdav.yandex.ru/"
curl -s --user "$AUTH" -d "$XML" -X PROPPATCH "https://webdav.yandex.ru/$FILE" | grep -Eo 'https://yadi.sk/[^<]+'
rm -f "/tmp/$FILE"
Да и он даже больше для этого подходит. Но цель статьи показать на живом примере, что php можно так же использовать для пользовательских скриптов.

Конечно, можно. Но зачем? Позвольте, пояснить свою мысль.


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

Я думаю, те самые "многие люди", сами того не желая, ввели вас в заблуждение, говоря так категорично.
Имхо, на любом языке программирования можно решить любую задачу, которую обычно решают на другом языке. Язык программирования — это просто набор инструкций, команд, которые нужно выполнить. Естественно, составить инструкцию можно на любом языке.
Просто обычно смотрят на себестоимость решения задачи на том или ином языке. Под себестоимостью я имею в виду удобство, скорость и простоту написания кода, получившийся объем этого кода. Сюда же можно добавить и скорость выполнения написанного кода.
На php можно написать что угодно, но во что это обойдется…
Демон на php может упасть или начать есть память — нужно написать кучу оберток и следить за этим (и перезапускать его). Для драйверов код на php слишком медленный и жрущий память. Для системных скриптов — слишком много кода на единицу функциональности.
В итоге, если использовать язык вне его ниши, можно больше времени тратить на борьбу с языком и изобретение костылесипедов, чем на создание функциональности. Я думаю, именно это и имели в виду те люди, говоря "никак не может быть использован". Это как "нельзя тыкать шпилькой в розетку" — тыкать-то можно, просто результат вам не понравится.

Плюс шелл-скрипты — набор системных команд, как правило. А PHP-скрипт — лишний слой, которому ещё и интерпретатор нужен (память, время на обработку), перед тем, как запустить системные же команды/приложения. Можно использовать php таким образом, но нет смысла. На вопрос «Зачем?» ответ может быть в данном случае только один — «Потому что можем».
По-моему, для таких системых задач, как создание скриншотов и выгрузки их на Яндекс.Диск — php идеален.
вот я тоже читал и думал: может быть автор круче меня и у него есть какая-то фишка, которая делает пхп круче для решения этой задачи, нежели баш + курл
я как бы не программист и стараюсь не вякать в таких темах и послушать умных людей или сам автор может быть умный, ведь все программисты умные и все такое…

б-же, никак не избавлюсь от этого комплекса неполноценности, но твой пост дает мне надежду на это
оказывается не все программисты умные и наверное я не хуже крутых программистов даже (только почему я не умею писать код?)

вобщем если бы мне надо было залить картинку на яндыкс, я бы заюзал баш и курл

сейчас мне надо брать гугл календарь за неделю и постить записи в пейсбук
для этого у гугла ессть целая пхп библиотека аж на 25 мегабайт и она даже работает

для получения списка записей в календаре надо просто сделать гет запрос
GET https://www.googleapis.com/calendar/v3/calendars/ид-календаря/events?key={YOUR_API_KEY}
получаем

200 OK

— Show headers —
{
«kind»: «calendar#events»,
«etag»: "\«p338ejguvkehcu0g\»",
«summary»: «kalobyte»,
«updated»: «2016-09-22T05:50:07.906Z»,
«timeZone»: «Europe/Berlin»,
«accessRole»: «owner»,
«defaultReminders»: [
{
«method»: «popup»,
«minutes»: 30
}
],
«nextSyncToken»: «CNDpw9-jos8CENDpw9-jos8CGAU=»,
«items»: [
{

«kind»: «calendar#event»,
«etag»: "\«2946678667918000\»",
«id»: «6uvg9e46eaaenh7hnctojt2d9o»,
«status»: «confirmed»,
«htmlLink»: «https://www.google.com/calendar/event?eid=NnV2ZzllNDZlYWFlbmg3aG5jdG9qdDJkOW8ga2Fsb2J5dGVAaW5ib3gucnU»,
«created»: «2016-09-08T12:55:33.000Z»,
«updated»: «2016-09-08T12:55:33.959Z»,
«summary»: «aaa»,
«creator»: {
«email»: "",
«self»: true
},
«organizer»: {
«email»: "",
«self»: true
},
«start»: {
«dateTime»: «2016-09-08T09:30:00+02:00»
},
«end»: {
«dateTime»: «2016-09-08T15:00:00+02:00»
},
«iCalUID»: «6uvg9e46eaaenh7hnctojt2d9o@google.com»,
«sequence»: 0,
«guestsCanInviteOthers»: false,
«guestsCanSeeOtherGuests»: false,
«reminders»: {
«useDefault»: true
}
}
]
}

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

на ковыряние и работу я убил 2 недели, потому что мануал библиотеки и примеров не соответствовал апи и вываливалась ошибка 404 и что там не найдено — непонятно и мануал молчит
чисто интуитивно поменял ид календаря с primary на конкретный ид и все заработало

теперь мне осталось разобраться с апи пейсбука и может быть там тоже есть библиотека пхп
Ну если это GET запрос можно обойтись одной строчкой на php

$result = json_decode(file_get_contents('https://www.googleapis.com/calendar/v3/calendars/ид-календаря/events?key={YOUR_API_KEY}'));


Но вот на bash это уже сложнее http://stackoverflow.com/questions/1955505/parsing-json-with-unix-tools.

Я к середине статьи тоже задумался о том, мол «блин, да это же можно сделать скриптом из 10 строк на баше, причем тут PHP?».


На PHP, в общем-то, можно и GUI-приложения лепить, но зачем?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории