Блогосфера

индекс
71,51

Читаем подзамочные записи Livejournal.com в Google Reader

До появления Google Reader я активно читал френд-ленту в Livejournal.com. А потом появился habr. А потом куча интересных standalone блогов.
Постепенно greader стал основным инструментом чтения новостей. А с открытием Yahoo Pipes качество моих лент значительно возросло.
Pipes позволили отфильтровать несколько лент только по интересующим меня топикам, позволили заполнить поле description в тех лентах, где авторы по каким-то причинам не стали их заполнять (новости с сайта IRN.ru, лента Компьютерры), и многое другое.

Но была в бочке меда и ложка дегтя. Ни Pipes, ни Google Reader не умеют делать digest authentication. Pipes умеют только basic, greader не умеет и того. А digest — единственный тип аутентификации, который поддерживает Livejournal.com.
Поэтому попытки залогиниться в ЖЖ и читать ленты с подзамочными записями были обречены на неудачу.
Приходилось периодически заходить в ленту и просматривать, не написал ли кто-нибудь из друзей что-нибудь «под замком».

Да, в интернете есть сервисы а-ля
http://freemyfeed.com,

решающие эту задачу, но доверите ли вы кому попало в интернете логин и пароль от своего ЖЖ? Да и как интегрировать с pipes этот сервис мне придумать не удалось. Но нет худа без добра: автор раскрыл исходники скриптов. Вооружившись терпением и мануалом по php, на основе исходных текстов freemyfeed я написал собственный скрипт — remove-authentication.php, который делает одну простую вещь: заменяет digest authentication на basic.
C ним становятся возможными конструкции:
http://user:pass@my.server/remove-authentication.php?feed=feed-url

И эта штука замечательно интегрируется с pipes.
Кому надо, забирайте. И читайте ЖЖ в Google Reader. )
UPD: код надо сохранить как remove-authentication.php и выложить на любой сервер, поддерживающий php :) В идеале — свой.
UPD2: перенес в блог RSS

<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Формат запроса - USER:PASS@SERVER.RU/remove-authentication.php?feed=FEED-URL';
    exit;
  } else {
    if (isset ($_GET['feed'])) {
      header("Content-Type: text/html; charset=utf-8");
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $_GET['feed'] .'?auth=digest');
      curl_setopt($ch, CURLOPT_AUTOREFERER, true);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
      curl_setopt($ch, CURLOPT_USERPWD,strtolower($_SERVER['PHP_AUTH_USER'] . ':' . $_SERVER['PHP_AUTH_PW']));  
      $data = curl_exec($ch);
      curl_close($ch);
    } else {
      echo 'Формат запроса - USER:PASS@SERVER.RU/remove-authentication.php?feed=FEED-URL';
      exit;
    }
  }
?>


* This source code was highlighted with Source Code Highlighter.


PS: это мой первый код на php, конструктивная критика приветствуется :)
+37
27 ноября 2008, 01:16
49

комментарии (61)

0
lagu #
Так, а что с этим кодом сделать надо? :)
0
dfayruzov #
Сохранить как remove-authentication.php и выложить на любой сервер, поддерживающий php.
–4
yaninna #
RSS-потоки яндекса и так показывают подзамочные)))
Своих френдов призвала поменять настройки, чтобы не палились…
–1
mmoo #
Вы криптозоологией не увлекаетесь? Говорят, снежный человек существует.
0
dajass #
РСС Яндекса уже давно (больше года) не показывает подзамочные. И не в настройках тут дело.
0
yaninna #
у меня показывает! и у других)))
И дело в настройках в ЖЖ.
Умные все — так минусуйте молча)))))))))))))
0
victorI #
а можно каммент или пост на эту тему? потому что он то показывает, то не показывает, у меня сложилось ощущение, что так происходит потому, что видимость выставляют после написания поста, а если сразу выставлять — то в ленте ничего нет
0
yaninna #
Там сразу если выставлять после написания поста — то видимость выставления, на самом деле баг палит многих.
Нужно в настройках установить изначально писать только для себя. Тогда даже пост «для всех» опубликуется по умолчания как инвизбл.
А Яндекс быстро забирает записи, в отличие от Google…
0
victorI #
ну да, о чем-то похожем я и подумал ))
спасибо
0
yaninna #
0
victorI #
а здесь 403
0
yaninna #
pics.livejournal.com/yaninns/pic/0000ay8x
*извиняюсь, ссылка была из подзамочного поста, вставила заново, должно быть видно*
0
victorI #
ага, понятно
спасибо еще раз
0
f0GgY #
я так понимаю такие настройки, позволяют не палить свои подзамочные записи? :), или наоборот?
чётъ я запутался…
0
yaninna #
Да, менно не палить свои подзамочные записи на весь инет. У меня в RSS много интересных ЖЖ, где я не френд, и иногда стыдно читать личные записи, предназначенные для друзей. Если пройти по ссылке, то уже закрыт пост, но поздно: в потоке он есть и будет всегда.
Обнаружила по собственному ЖЖ, попробуйте себя ввести в RSS
0
f0GgY #
:) я лопух, мне надо разбираться, что бы чего нить пробывать.
Спасибо за наводку!

*ушёл читать про контрацептивы )))
0
f0GgY #
да и сервера у меня нет, где пхп файл положить :)
но сделать что бы не палиться, это можно и без онного.
сенк! :)
0
Shtirlizz #
Только если кто-то воспользуется инструкцией из этого поста, все методы предосторожности не помогут
+1
yaninna #
Ну, а по теме: не все знают, и большинство подзамочных посто уже захвачено RSS-потоками именно Яндекса, в Google — нет…
0
Shtirlizz #
Если на журнал через гуглоридер подписано несколько человек то тоже достаточно быстро захватываются.
0
yaninna #
Спасибо, не знала. Однако, Яндекс хранит даже удаленные посты, и даже если в новом потоке заново добавить ЖЖ — проиндексирует и вставит, а Google не показывает. Свой удаленный журнал (все посты сама лично удалила после того, как его ломанули), так и читаю ))) Полезная фишка для меня
0
Shtirlizz #
Простите за не скромный вопрос, а вы были подписаны на свой ЖЖ(удалённый) через гридер, до его удаления?
0
yaninna #
Нет, не была подписана, в этом дело? Но в Яндексе то тоже новая рега, новая подписка — и показал все записи… Причем, эксперементировала: удаляла пост и в Google его уже не было, в Яндексе — был. Но возможно разовый случай.
Обязательно в декабре поиграюсь с подписками и постами, сейчас инет малоскоростной, вот 5 мин страницу открывала)))
0
dajass #
А когда Яндекс вообще удаляет проиндексированные посты? Есть какие-то данные по сроку устаревания?
0
yaninna #
В том то и дело, что не удаляет. И хранит видимо и комменты, еще не пробовала поюзать не так давно открытый «поиск по комментариям»
0
dajass #
Ну я собственно говоря вас не минусовала :)
0
yaninna #
Тогда приношу извинения за ответ на это Вам.
А про настройки ЖЖ Вы ошибаетесь…
+2
payalnik #
Какой нехороший метод открыть подзамки для всего интернета. Ждем первых скандалов.
0
Shtirlizz #
Ну хоть есть ещё адекватные люди.
0
WarpFluTTer #
Здорово. Сам читаю френдленту через pipes, правда в программировании ничего не смыслю и в частности в php. Очень хотелось бы увидеть подробную инструкцию по интеграции этого дела с пайпсами и сорс пайпсовской конструкции которую ты используешь.
0
dfayruzov #
Насчет подробной интеграции — сначала посмотрите фид:

0
dfayruzov #
(Enter при редактировании лучше не нажимать :))
Сначала посмотрите фид:

http://pipes.yahoo.com/dfayruzov/ljfriendsfeed


Если останутся вопросы по интеграции — спрашивайте. )
+1
anton #
Вы же понимаете, что, сделав так, рискуете открыть подзамки всех своих друзей публично и через месяц найти их в поиске?
0
Istarin #
Можно подробней? Даже если я не «share» запись, она всё равно индексируется и попадает в выдачу гугла, будучи отображённой в greader?
+1
Xeor #
Например у гридера есть такая вещь, как рекомендация мне лент на которые подписаны те, кто читает похожие ленты что и я. Вот будет интересно, если такая лента с подзамками будет кому-то рекомендоваться
+1
mmoo #
Ого, тогда и пароль, получается, можно засветить.
А там нельзя как-то создавать никому не видимые ленты? А то вы меня расстроили. Я уж думала, наступило светлое будущее.
0
Xeor #
Пароль лучше встроить внутрь прокси-скрипта, а не передавать ему в строке запроса :)
+2
dfayruzov #
И снова нам на помощь приходят yahoo.pipes:
0
DYm00n #
Сделал тоже самое, а куда фид ставлять? Не мог бы подробнее рассказать бы?
0
realabs #
Спасибо, полезная фича. У меня работает :)
0
cas_alexi #
если есть машина с пхп, то там есть и мускл… можно попробовать сделать свой гридер на вордпрессе (для вордпресс есть плагин который умеет в себя агригировать рсс поток)+этот код
ну и в этот свой ридер пускать только себя
+1
Infthi #
Эммм
Не вижу необходимости в мускуле
В своё время написал для тех же целей парсер (заточен был под моё форматирование, но не суть важно):
по крону запускался wget, который забирал последние штук 5 страниц френдленты (будучи авторизованным), и склеивал их в отдельный файлик. php-скрипт тупо разбирал это регэкспом (потому и зависимость от стиля была) и выдавал rss, который я с удовольствием читал. Необходимости в мускуле, повторяю, нету.
0
glader #
«Pipes умеют только basic, greader не умеет и того.»
«заменяет digest authentication на basic»
не понял, какой смысл тогда преобразовывать digest в basic, если GReader-у это не поможет?
0
dfayruzov #
LJ feed -> преобразования в Pipes -> greader
0
nicothin #
выше писали о том, что так вполне можно открыть подзамочные записи своих жрузей. по-моему, возможность читать френд-ленту в GReader не стоит такой пакости…
понятно, что «безболезненно» подзамочные записи из ЖЖ не достать в GReader, так что тут можно только активно добиваться от самого ридера к-л подвижек, связанных с конфеденциальностью лент, которые читаешь.
или я не прав?
0
dfayruzov #
Можно удалять содержание непубличного поста: остается только заголовок и ссылка.
Как это сделать с помощью pipes — картинка выше.
0
neptune #
Уже как пару лет читаю похожим образом ЖЖ. Только мой скрипт работает немного иначе — к примеру по запросу somehost/script/username.livejournal.com/login/pass я просто получаю feed.
0
coldFlame #
И че, светить в ссылке на RSS свой логин и пароль?
Я бы их в коде прописал, вы ведь все равно скрипт у себя хостите.
0
dfayruzov #
И ты прав. (с): )
0
dajass #
Спасибо большое, мегаполезная штука!
До этого френдленту приходилось читать только из ЖЖ :)
0
GMM #
Я например для того чтобы читать входящую почту вконтакте через RSS написал, маленький конвертор через regexp и сделал локальный http сервер на питоне. Вроде работает.
0
pratavetra #
Всё это, конечно, замечательно, но пока не будет возможности читать через RSS ещё и комментарии — использование RSS для ЖЖ неюзабельно, увы. Зачастую бывает так, что дискуссия в комментах гораздо интереснее, чем сам пост.
0
rocket #
Скрипт не работает. Пустую страницу показывает. В спуле пусто.
Для через нужна переменная $data? Я не вижу в коде её применение.
На какой строке должен выводиться текст в спул?
0
dfayruzov #
Два года прошло, я уж и забыл про это пост. )
Правильно вот так:


$data = curl_exec($ch);
curl_close($ch);
echo $data;
} else {…
0
rocket #
Упс. Оказывается, функция curl_exec() сама делает echo. Ваш код правильный.
0
dfayruzov #
На самом деле у меня в исходнике оно закомментировано, я написал, не проверив. ) Но все хорошо что хорошо заканчивается. )
0
rocket #
Я бы, кстати, дополнил ваш исходник одной полезной функциональностью:
При использовании дефолтного жжшного rss, например, в Google Reader не показывается автора поста.
По стандарту RSS автор item-а указывается в тэге <author>, а жжшный RSS парсер пихает зачем-то автора в тэг <lj:poster>
Я сделал так:
=========================================
...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // умышленный фетчинг страницы в $data
$data = curl_exec($ch);
curl_close($ch);

$data = str_replace("<lj:poster>","", $data); // реплейс тэга
$data = str_replace("</lj:poster>","", $data);

echo $data; // вывод страницы в спул
=========================================

Надеюсь, кто-нибудь через яндекс найдёт данный коммент полезным :)
0
rocket #
Чёрт. ЖЖ забанил мой скрипт после двух недель его работы… :(
0
dfayruzov #
Это как?: )
0
rocket #
На любой реквест возвращает респонсом "<b>Digest authentication failed.</b>".
Логин и пароль правильные.
0
Abolin #
Они вообще поломали поломали digest authentication, конкретный скрипт не при чем
community.livejournal.com/lj_dev/834863.html

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.