Скрипт для публикации заметок из дииги в фейсбук
Я веду личную базу знаний в Дииге. Все новые записи оттуда автоматически попадают в телеграм-канал, а избранные (с тегом fb) — в фейсбук. Для последнего раньше использовал IFTTT.
Проблема
Дииго и IFTTT съедали переносы строк в описании, поэтому записи в фейсбуке выглядели так:
Решение
Я написал небольшой скрипт, который вытягивает из API Дииги свежие заметки с тегом fb (при этом не теряются переносы строк в описаниях) и формирует RSS-ленту (вот она). Эту ленту раз в несколько часов проверяет Zapier и, когда видит свежую запись, создаёт пост в фейсбуке:
Код
Код простой и я специально написал комментарии к каждой строке, чтобы можно посмотреть, насколько просто всё получается. Если справляетесь с настройкой GTM и формулами в экселе, то и с этим скриптом справитесь.
<?php
// получаю свежие записи из своей ленты дииги с тегом fb
$bookmarks_json = file_get_contents (
'https://логин:пароль@secure.diigo.com/api/v2/bookmarks?key=ключ&user=vdustinov&count=10&tags=fb');
// преобразую из json в обычный массив
$bookmarks = json_decode($bookmarks_json);
// формирую будущую rss-ленту обычной текстовой строкой
$rssfeed = '<?xml version="1.0" encoding="utf-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>Трансляция заметок из дииги в фейсбук</title>';
$rssfeed .= '<link>https://www.diigo.com/user/vdustinov</link>';
$rssfeed .= '<description>База знаний Всеволода Устинова</description>';
// беру заметки из массива по одной и дописываю их в строку с RSS
foreach( $bookmarks as $key => $item ) {
$rssfeed .= '<item>';
$rssfeed .= '<title>' . $item->title . '</title>';
$rssfeed .= '<description>' . $item->desc . '</description>';
$rssfeed .= '<link>' . $item->url . '</link>';
$rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O", strtotime($item->updated_at)) . '</pubDate>';
$rssfeed .= '</item>';
}
$rssfeed .= '</channel>';
$rssfeed .= '</rss>';
// Лента сформирована, осталось вывести её
header("Content-Type: text/xml; charset=utf-8");
echo $rssfeed;
?>
Вот что выдаёт этот скрипт: http://vsevolodustinov.ru/blog/user/se-diigo/se-diigo-to-facebook-rss.php
Комментарии
Весь процесс занял часа четыре.
IFTTT заменил на Zapier, потому что первый постоянно выдавал сюрпризы с форматированием и по кнопке Run now мог не запускать скрипт по неколько минут, что ужасно раздражало при отладке.
Отправку в фейсбук тоже можно было бы сделать скриптом, но разбираться с API фейсбука дольше, чем с Zapier. Плюс тогда нужно было бы настраивать Cron и следить за ним.
Зачем всё это
Я могу долго рассказывать, как программирование тренирует инженерное мышление, помогает в работе и вообще, но на самом деле мне просто нравится. Программирование — это hard fun. Сначала hard, зато потом fun!
Очень вдохновлющее улучшение. Видимо, скоро и я заведу себе подобную базу знаний.
Но мне кажется, тут можно обойтись без своего скрипта по формированию RSS.
Сам Diigo уже формирует хорошую RSS ленту. Для Вашего аккаунта — https://www.diigo.com/rss/user/vdustinov
А для тега fb, соотвествненно, https://www.diigo.com/rss/user/vdustinov?query=%23fb
Да, я сейчас вижу, что переносы строк съедал IFTTT, а не РСС Дииги. Замена IFTTT на Zapier решила бы проблему. Но для фейсбука хотел ещё теги не выводить. А для трансляции в телеграм теги надо менять под телеграмовский формат. Тут без скрипта уже не обойтись :-)