Собственно, этот небольшой пост не несет ничего особенно нового в плане работы с Delphi. Однако может оказаться полезен тем, кто пишет свои Delphi-приложения для работы с данными из Всемирной паутины. Мы все давно привыкли к такому обычному явлению на сайтах как кнопки социальных сетей. Удобная вещь — ткнул кнопочку, ввел пару строк текста и ссылочка на страницу сайта размещается в вашем аккаунте Twitter, Facebook, Google+ или, чем Вы там пользуетесь? Почему бы не использовать такую возможность в программах, написанных на Delphi? Ну, например, пишем мы удобную читалку RSS — почему бы не дать пользователям возможность «расшаривать» понравившиеся записи в социальных сетях — мелочь, а приятно.
Самый лучший способ работы с социальными сетями в этом случае — это подключиться к API Сети, авторизовать там пользователя и, уже манипулируя методами самого API, делать все, что угодно — расшаривать записи, читать контакты, писать сообщения и т.д. Но, если прикинуть соотношение «затраты времени — результат», то может оказаться так, что в целом-то простенькая операция по расшариванию данных в социальной сети «отъест» довольно не маленький кусок времени — это ж надо разобраться с протоколом, правильно авторизоваться, парсить кучу всяких XML/JSON. В общем качественно, надежно, но муторно с точки зрения разработки и долго. Я для себя определил более простой (пусть и не такой красивый как использование API) вариант работы с кнопками социальных сетей в Delphi.
Решение, которое я использую, нашлось, можно сказать, само собой, когда я настраивал панельку в своем Chrome. А заключается решение в следующем. Любая крупная социальная сеть, будь то Twitter, Facebook или любая другая, предоставляет своим пользователям в распоряжение кнопки для браузеров, именуемые букмарклетами. Ну, например, вот такие, как у Facebook. Опять же хорошая штука — мало ли где владелец сайта разместил кнопочки соц.сетей, а тут — все под рукой прямо в браузере. Так вот, такие кнопки, есть ни что иное как обычный JavaScript, который мы, имея даже самые скромные познания в JS — поймем без проблем. А поняв — сможем сделать тоже самое, но в Delphi.
По большому счёту, от нас требуется очень не много — составить URL с необходимым набором параметров и открыть этот URL в браузере. Лучше, конечно, использовать браузер по умолчанию, т.к. в этом случае мы можем избавить пользователя от ввода логина/пароля (он просто может быть уже авторизован в соц. сети).
Покопавшись немного по бумарклетам разных социальных сетей я собрал несколько шаблонов URL, которые вы можете использовать в своих Delphi-приложениях. Вот они:
Facebook:
https://www.facebook.com/sharer/sharer.php?u=%s&t=%s;
Первый параметр — URL странички, которую Вы хотите опубликовать на своей стене Facebook
Второй — текст, который должен быть опубликован вместе со ссылкой.
В результате, выполнив, например, вот такой код:
... ShellExecute(0, 'open', PChar(Format(https://www.facebook.com/sharer/sharer.php?u=%s&t=%s,['http://www.webdelphi.ru/2012/11/delphi-xe3-rabota-s-xml-v-mac-os-x/','hello world'])), nil, nil, SW_SHOWNORMAL)
Мы увидим в браузере вот такую страничку:
Twitter:
https://twitter.com/intent/tweet?text=%s
Единственный параметр в запросе — текст твита. В текст вы можете закинуть и необходимые ссылки. Выполненый код, аналогичный вышеприведенному получим следующую форму отправки твита из браузера:
Google+:
https://plus.google.com/share?url=%s
Google+ принимает в запросе пока только два параметра — один из них (url страницы) представлен в шаблоне выше, а второй — язык на котором будет представлена пользователю форма, в принципе, не нужен, т.к. сам Google прекрасно определяет язык пользователя. Кстати, для поиска этого шаблона не пришлось особо ничего изучать — достаточно было посмотреть документацию на API Google+ по части расшаривания страниц сайтов.
Внешний вид странички с расшариваемой страницей сайта:
Вот, собственно, три шаблона URL для приложений Delphi, которые Вы можете использовать уже сейчас и без всяких мучений с OAuth Twitter’a, Facebook или Google дать пользователям Ваших программ возможность расшаривать ссылки в их любимых социальных сетях.