«Я никогда не слушаю никого, кто критикует мои космические путешествия, мои аттракционы или моих горилл. Когда это происходит, я просто упаковываю моих динозавров и выхожу из комнаты» © Рей Бредберри

Скрипт для публикации заметок из дииги в фейсбук

25 марта 2018, 1:31

Я веду личную базу знаний в Дииге. Все новые записи оттуда автоматически попадают в телеграм-канал, а избранные (с тегом 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!

1 комментарий
Иван Белявцев

Очень вдохновлющее улучшение. Видимо, скоро и я заведу себе подобную базу знаний.

Но мне кажется, тут можно обойтись без своего скрипта по формированию RSS.
Сам Diigo уже формирует хорошую RSS ленту. Для Вашего аккаунта — https://www.diigo.com/rss/user/vdustinov
А для тега fb, соотвествненно, https://www.diigo.com/rss/user/vdustinov?query=%23fb

Всеволод Устинов

Да, я сейчас вижу, что переносы строк съедал IFTTT, а не РСС Дииги. Замена IFTTT на Zapier решила бы проблему. Но для фейсбука хотел ещё теги не выводить. А для трансляции в телеграм теги надо менять под телеграмовский формат. Тут без скрипта уже не обойтись :-)

Популярное