всем привет! предыстория проекта: я слишком Ъ, чтобы ходить на этот их вконтактик. но есть некоторые люди, которые упорно не признают никаких нормальных видов связи (есть телефон, но это еще хуже убожество). а в этот школодром как зайдешь - вместо того, чтоб написать кому надо, тебе с порога предлагают посмотреть тонну смешных картинок, вступить в какое-нибудь говно и так далее...
раньше пользовался их джаббером (через j2j, правда, ну не суть), потом его прикрыли... и в один прекрасный момент почитал я про ихнее апи, да и пришла мне в голову мысль запилить себе тулзу консольную, чтоб через оное апи писать.
вот так и вышло. разобрался, поборол и в итоге набыдлокодил. на баше, ибо больше нифига не знаю))
интерфейс fdisk-подобный - выдает список команд или пунктов по номерам, а юзер выбирает, чего ему надо, ну и далее по менюшкам...
умеет получать сообщения (а также отвечать, удалять, помечать прочитанными), выводить список друзей и выбранному человеку писать сообщения, выводить список онлайн-людей и опять же им писать. а больше нафиг ничего и не надо))
хотя есть киллер-фичи - можно выполнять любые апи-запросы и любоваться на ответ сервера, но самое крутое - можно писать самому себе))) сделано для дебага, конечно, но мало ли у кого совсем все плохо)))
пример работы (многабукаф):
unread messages: 0
enter a command. list of available commands:
f|friends o|online m|messages h|help a|advanced q|quit
>a
enter a command. list of available commands:
m|myself a|api <method> <params> h|help q|quit
>m
sending message to: димон *** (203****23)
enter your text, type 's' or 'send' on a separate line to send,
'q' or 'quit' to cancel
--------------------------------------
test
me
s
sent successfully, message id 14872
enter a command. list of available commands:
f|friends o|online m|messages h|help a|advanced q|quit
>m
unread messages: 1
only 1 unread message:
[0] димон *** 2014-09-15 15:23:59
test
me
choose an action for current message:
m|markAsRead r|reply d|delete q|quit
>d
delete this message? [Y/n]
message 14872 was deleted successfully
enter a command. list of available commands:
f|friends o|online m|messages h|help a|advanced q|quit
>m
unread messages: 0
no unread messages!
enter a command. list of available commands:
f|friends o|online m|messages h|help a|advanced q|quit
>q
bye!
в общем, все достаточно интуитивно, даже хелп есть для ниасиливших, а так очень быстро щелкается, благо сокращенные команды пуляются с одной кнопки.
код сегодня весь проглядел, подлопатил кое-где, прокомментировал во всех местах (а то сам уже стал забывать, чего я там нагородил). код, как мне кажется, ни разу не наркоманский, да с комментами понять тем более можно. все что можно вынесено в отдельные функции, к ним есть пояснения, какие параметры им даются, какие переменные они ожидают увидеть, что возвращают. это на случай, если кто-то задумает расширять - оно расширяемо.
скачать побетатестить да поковырять можно здесь: https://sourceforge.net/projects/vk-api-cli/files/
там в ридми вкратце расписано, как это чудо завести, нужно будет ссылку открыть и подтвердить там доступ «приложению». пароль можно не сохранять, будет спрашивать тогда при запуске. вроде бы, после авторизации через сайт потом должно без проблем запускаться - у меня давно уже работает, не помню уже.
все проверено на уровне «у меня все работает». если какие грабли будут - постараюсь разобраться.
из требований - curl да grep-sed-coreutils, и всего делов.
за парсинг xml с помощьб grep/sed сильно тапками не пинайте - я смотрел всякие готовые консольные тулзы и че-то пришел к выводу, что прогрепать один-два тега и вытащить из них значение - как-то проще и понятнее. к тому же, такая конструкция понятна всем и предсказуема ровно настолько, насколько предсказуем grep на простейших регэкспах, т.е. почти всегда. плюс пофиг на кривые хедеры и прочую муть.
ах да, код по WTFPL)) багрепорты-пожелания-критика-помощь и всяческий другой фидбэк приветствуется, по ссылке написано, куда писать.
ЗЫ. вконтактик не нужен. баш не нужен. школоподелки на баше для писания на вконтактик не нужны просто в космическом масштабе)))