ダウンロードは以下から。
・RSS配信モジュール Ver.0.5.0
OpenPNE 2.6.7、2.8.0において動作を確認していますが、それ以外のバージョンで動作するか否かは不明です。
設定等、細かい点は readme.txt に書いてあるので、アーカイブ中の readme.txt をまずお読みになってください。
質問等あれば、コメントか、もしくはOpenPNEのコミュニティの中でお願いします。 :-)
#メールも可です :-)
【更新履歴】
2007/06/03 Ver 0.5.0
・認証有り無しをconfig.phpで指定できるようにした
・config.phpの定数周りをいろいろ修正、追加(0.4.5と変わっています)
・テンプレートを結構修正
・バッチ系をいろいろ追加して、定期的にRSSをファイルに吐けるように
【所感?】
ああ、手順とか長くなってきたなー
そろそろまとめサイトでも作らないと、皆さんに敬遠されちゃうかな?(笑)
そんなわけで、ちょっとテスト不足の感があるのですが(笑)、0.5.0としてリリースします。
まあ、実際、利用したいユーザーさんがどのくらいいらっしゃるかわかりませんが、需要がないわけでも無かろうと思いますんで。
「さむしんぐにゅぅ」のyzさんよりトラックバックいただいたりして、認証なし版を追加してみた0.4.5をリリースしましたが、その後、少し認証なし系の改良を加えてみていました。
「デジタル番長(弐)」さんよりTBいただいて、コミュニティ絡みの認証なし系の話のあったので、正式にリリースしてみることにしました。
OpenPNEのコミュニティをRSS出力: デジタル番長(弐)
http://digiban.seesaa.net/article/43635311.html
赤字のxxxの部分は、RSS出力したくないカテゴリをダイレクトで指定。この辺はトピック単位にしたり、コミュニティ単位にしたりと色々あると思うけど、自分は面倒くさいので非公開用のカテゴリを作ってカテゴリ単位にした。
あ、出力したくないカテゴリの指定とか実装してませんけれどもw
まあ、c_commu.c_commu_category_idで除外するものを指定すればいいんで、そう面倒でもないですが・・・
面倒なのは、「どう除外させるか」という汎用的な手段を用意する方なので、それが面倒だなぁと。
#個別に対応するだけなら楽
そのうち対応してみるかもです。:-)
とりあえず、皆さんが修正できる範囲で書いておくと、アーカイブの中の「mysql_functions.php」を編集する感じです。
例えば、認証なし系(get_com_rss.php)で公開するコミュニティを制限するなら、
function db_rss_all_commu_c_commu_topic_comment_list4c_member_id_with_body($c_member_id, $limit)
{
if(!$c_member_id){
$sql = 'SELECT c_commu_id FROM c_commu_member';
$c_commu_id_list = db_get_col($sql);
}else{
$sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
$c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
}
の部分の「$sql = 〜」って場所を修正する感じです。
・公開範囲が「公開」のものを公開
if(!$c_member_id){
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu.public_flag = 'public'";
$c_commu_id_list = db_get_col($sql);
}else{
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu_member.c_member_id = ? AND c_commu.public_flag = 'public'";
$c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
}
こんな感じ。
コマンドラインでは試してますが、実運用的には試してませんけど。
public_flagで判断させようとした場合は、やはり、OpenPNE公開日記モジュールのように、public_flag='open'とかあった方がいいなーと思いますが・・・
・カテゴリIDで制限する場合
例として、1と2だけ一般公開する。
if(!$c_member_id){
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu.c_commu_category_id IN ( 1, 2 )";
$c_commu_id_list = db_get_col($sql);
}else{
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu_member.c_member_id = ? AND c_commu.c_commu_category_id IN ( 1, 2 )";
$c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
}
こんな感じ。
c_commu.c_commu_category_id IN ( 1, 2 )
のところに「1,2」のようにカンマ区切りでカテゴリIDを記述するだけです。
上記は「公開したいものを指定」していますが、逆に、「公開したくないものを指定」するのであれば、「IN」ではなく「NOT IN」を使用します。
c_commu.c_commu_category_id NOT IN ( 1, 2 )
これで、「カテゴリIDが1と2でないもの」を公開するようにできます。
もっと汎用的にするなら、いっそコミュニティの名前で一般公開の有無を決めてしまえという感じですね。
というわけで・・・
・コミュニティ名で制限する場合
例として、「【一般公開】」で始まっていたら一般公開する。
if(!$c_member_id){
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu.name LIKE '【一般公開】%'";
$c_commu_id_list = db_get_col($sql);
}else{
$sql = "SELECT c_commu_id FROM c_commu_member LEFT JOIN c_commu USING (c_commu_id) WHERE c_commu_member.c_member_id = ? AND c_commu.name LIKE '【一般公開】%'";
$c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
}
こんな感じ。
本来のRSS配信モジュール(com_rss.php)の方で、認証なし設定にして、同じことをやりたい場合は、上記の2番目の「$sql =
〜」を参考にして、
db_rss_commu_c_commu_topic_comment_list4c_member_id_with_body
関数の先頭に記述してある
$sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
を修正すれば良いでしょう。
3番目のやり方を踏襲すれば、トピック毎に制限を掛けることも出来ますね。
トピック名に「【一般公開】」ってあったら、公開するとか。
ふむ、アイディア沸いたのでメモっておきましょう(笑)
その場合は、
db_rss_all_commu_c_commu_topic_comment_list4c_member_id_with_body
だとすると、
$sql = 'SELECT cct.c_commu_topic_id, cct.c_commu_id, MAX(cctc.r_datetime) as r_datetime, cct.r_datetime as org_r_datetime, cct.c_member_id'.
' FROM c_commu_topic as cct, c_commu_topic_comment as cctc'. $hint .
' WHERE cct.c_commu_id IN (' . $ids . ') AND cctc.c_commu_topic_id = cct.c_commu_topic_id'.
' GROUP BY cctc.c_commu_topic_id'.
' ORDER BY r_datetime DESC LIMIT 0,'.$limit;
↑これを↓こうですかね。
$sql = 'SELECT cct.c_commu_topic_id, cct.c_commu_id, MAX(cctc.r_datetime) as r_datetime, cct.r_datetime as org_r_datetime, cct.c_member_id'.
' FROM c_commu_topic as cct, c_commu_topic_comment as cctc'. $hint .
' WHERE cct.c_commu_id IN (' . $ids . ') AND cctc.c_commu_topic_id = cct.c_commu_topic_id'.
" cct.name LIKE '【一般公開】%'".
' GROUP BY cctc.c_commu_topic_id'.
' ORDER BY r_datetime DESC LIMIT 0,'.$limit;
動作は未検証ですが(笑)
とまあ、こんな感じでやりようはいくらでもあるので、それをいかに汎用的に実装するか、あるいは、OpenPNE本体側の修正なしで作るかというのが課題になりますね〜
OpenPNE本体に改良加えても良いのだったらいくらでもやりようはあるのですが、それはしないのが私の方針ですので。
本体側のバージョンアップ時に修正が多くなるのが嫌なので(笑)
それと、汎用的に作ったつもりでも、違う言われることもあるんで、微妙なんですよね〜
それが予想の範疇だと(そこまでは手が回らない、あるいはやりたくないとかw)、まだ作ってみようかという気にもなるんですけど、これが特異な使い方をしたがる人もいるので、追随できない部分も多いですけれど(苦笑)
yzさんやBanchoさんのやりたいことは良くわかるので、今回取り入れてみましたが、ええ、メールで特殊な要望が来ましたので。
さすがに個人的には出来ないレベル(お金をもらって云々レベル)の話だったので、丁重にお断りしました。
いや、真面目な話、メールにも書かせていただきましたが、そもそも、そこまで改良入れると、OpenPNEとは別物になるので(笑)
SNSの選択しなおしか、SNSじゃなくて、フォーラム型掲示板(XOOPS、phpBBなど)にプラグイン導入すれば実現できるんじゃ?とかもあったので・・・
ただ、出来ないものは出来ないものの、その果て無き欲求には、スゴく刺激を受けております。




いやぁ、トラックバックしてみるもんですねぇ〜
まさかこんなに早く取り入れて頂けるとは…
早速、利用させて頂いております。
RSSリーダー(と言ってもIE7ですが)でカテゴリの絞込みが出来るのが便利ですね。
日記などの公開範囲に、外部への公開というのがあって、それを指定した日記だけRSS情報として公開されるようなことができればなあと思ったり・・。
コメントなどは、公開される必要はないと思うのですが、コメント数だけは取得できれば、他の方が見たいと思って登録してくれるかもな・・と淡い期待。
ご愛用ありがとうございます。(^_^)
「こうしたらいいんじゃないか?」というようなアイディアがあったら、コメントorTBいただければ、検討しますので、よろしくです。
categoryの扱いが微妙だったので、とりあえず逃げの方向に走ったら、「カテゴリに複数入力したときの扱いがおかしくない?」とか言われておりますが・・・w
>miyawakiさん
Kei Kuboさんの「OpenPNE 公開日記モジュール」のことですかね?
新しく記事に起こしてみますので、そちらを参照してください。
新しい記事の方参考にさせていただきますm(_ _)m
ちょうどコメントをいただいたくらいのタイミングで公開設定しましたので、参考にしてみてください。
私が勘違いしてなければ、若干の修正でできると思いますので。
もう一度公開してください。お願いします。
↓現状はお知らせページで開示しているとおりです。
http://shima3.seesaa.net/article/47940118.html
0.6.4以前は削除していますが、最新バージョン0.7.0をご利用ください。
http://shima3.seesaa.net/article/52848591.html
RSS配信モジュールは、本体側のDB構造が大きく変わらない限りは利用できます。
動作検証バージョン以外でも、ある程度は動くと思いますので、最新バージョンを利用してみてください。
もし動かなければ「OpenPNE x.x.xでは動きませんでした」と報告していただければ幸いです。m(__)m