PHP版 RSSリーダー(FC2用)

PHP版 RSSリーダー(FC2用)

どうもKazです。
とりあえず、BLOGを書きたい。そして連携したいと言うクライアント様には
PC表示時の広告表示が小さい FC2 BLOG をススメておりました。
そして、ホームページと連携する際はfeed2.jsを使ってRSSを表示しておりました。

さて、最近ではFC2 BLOGでもアイキャッチが設定できるという事で、RSSからアイキャッチを表示して見栄えのいい「最新情報」的な物が作れるかなと思ったら
RSSでもAromでも一切吐き出す気配がなく
FC2へ問い合わせたところ
『アイキャッチはRSSに出力されません』
と公式な回答を頂いてしましました…

『FC2ではアイキャッチ表示ができるのに、何で引用すると出ないんだ!?』
と言われる事もあると思うので
アチコチ見て参考にしながら、PHP版ですがFC2用のRSS表示する物を作ってみました。
(PHPは記事の最後にあります)

RSSリーダーのポイント

RSSの取得部分

$url = simplexml_load_file("【RSSのURLを設定】");

クロスブラウザの件を解消する簡単な方法としては、PHPで取得するのが手っ取り早いようです。
JavaScriptに詳しいひとなら、この後をJavaScriptだけで書けるかもしれません。

日付などの整形部分

$timestamp = strtotime( $item->children('http://purl.org/dc/elements/1.1/')->date) ;//更新日の整形
$content = $item->children('http://purl.org/rss/1.0/modules/content/') ;// 記事の取得

purl.orgリダイレクトサービスを利用して整形を行います

アイキャッチとして使う画像

記事の一番初めに使われている拡大表示可能なが画像をアイキャッチとして取得します。

if( preg_match_all('/<a([\s\S]+?)>/is', $content, $matches) ){

$img_ct=0; //初期化
$sub_img=array(); //初期化

foreach( $matches[0] as $img ){
    if( preg_match('/href=[\'"](.+?jpe?g)[\'"]/', $img, $m) ){
                $sub_img[$img_ct] = $m[1];
            }
    $img_ct++;
}

if ( is_null($sub_img[0])){}else{$item->thumbnail = $sub_img[0];}

記事中の<a>タグで囲まれている<img>タグをかき集めて、一番初めの物を最終的に取得しています。

この一連の作業を指定回数回して、リストとして出力する事でアイキャッチ付きのRSSを表示できます。

RSSリーダー PHP版(FC2用) DL fc2rss.php※写真がない場合の画像は、同一ディレクトリ内に「img」フォルダを作ってファイル名を「noimage.jpg」として画像を入れてください。

カスタマイズする事でイロイロと使えると思いますので、試して見てください。


windowsでデジタルサイネージをやるにあたり制御用の小さなプログラムをUWSCで書いてみる。

172013

最近流行のスティックPCですが、これを使ってWindowsPCによるデジタルサイネージが出来ないか、模索してます。
PCベースでデジタルサイネージを構築する際、必要になってくるがブラウザ制御用ソフト。基本放置で何時間も稼働するわけですが、不意のリセットやフリーズ、勝手な再起動にどう対処するかが、課題になります。

まずは、どんなサイネージになるのかデモを作ろうと思い、IEをコントロールする用のスクリプトをUWSCで書いてみました。UWSCはフリーのWindowsコントロール用スクリプト言語。元々はマウスの動きを「録画して」再生するソフトだったと思います。基本的にWindowsの制御には最適な言語です。

とりあえず、スクリプトをEXE化して、スタートアップに入れ、自動でブラウザを起動、定期的に読み込み直し、時間が来たら終了、をやってみたいと思います。(EXE化はUWSCシェアウェア版の機能)
とりあえず、UWSC公式サイトのIE起動サンプルをベースに組み立てます。

STOPFORM(FALSE) //stopボタンを非表示に

//ブラウザをフルスクリーンで起動
Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = true
setOleEvent()
URL = "スライドショーの置いてあるURL"
IE.Navigate(URL)
IE.FullScreen = True

//定期的に読み込み直し
WHILE 1
KBD(VK_F5, CLICK, 100) //F5キーを押す
SLEEP(600) //600秒に1回リロード

GETTIME()
X = G_TIME_HH2 + G_TIME_NN2 //現在時刻の取得
IFB X = 2030 THEN //20時30分にシャットダウンする
POFF(P_SHUTDOWN) //PCをシャットダウン
ENDIF

WEND

//------IE制御用
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg
Procedure BusyWait()
  Sleep(0.3)
  tm = GetTime()
  repeat
    ifb GetTime() - tm > 90  // TimeOut
       Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
       IE.Navigate(Pub_url)
       tm = GetTime()
    endif
    Sleep(0.2)
    ifb Pub_inp_flg
       Pub_inp_flg = False
       continue
    endif
    if IE.busy then continue
    if Pub_url = "" then break  // No read
    if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IE.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue
    errflg = False
    if IE.document.title = "503 Unavailable" then errflg = True
    if IE.document.title = "Service Unavailable" then errflg = True
    if IE.document.title = "503 Service Temporarily Unavailable" then errflg = True
    ifb errflg
       Sleep(90)  // 503: Wait&Retry
       tm = 0
       continue
    endif
    Sleep(0.3)
  until ! Pub_inp_flg
  Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
  SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
Fend
Procedure setOleEvent()
  OleEvent(IE, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav")
  OleEvent(IE, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp")
  OleEvent(IE, "DWebBrowserEvents2", "OnQuit", "fucQuit")
  Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False
Fend
Procedure fucBeforNav()
  ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
     if Pub_url="" then Pub_url = ""+EVENT_PRM[1]
     Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1
  endif
  Pub_inp_flg = True
Fend
Procedure fucDocComp()
  ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
     Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*"
     Pub_DocComp_cnt = Pub_DocComp_cnt + 1
  endif
  Pub_inp_flg = True
Fend
Procedure fucQuit()
  ExitExit
Fend

実際に表示するスライドショートして、フルスクリーン表示が可能な、jqueryのスライダーcamera slideshowを使ってみました。画像のみ差し替えあとはフルスクリーンのデモそのままです。

http://agn-web.com/demo/camera/demo/fullscreen.htm

デモではドロップボックスのpublicフォルダにスライド用の写真を入れてありますので、ドロップボックスに指定のファイル名で画像を放りこめば、デジタルサイネージのスライドショーも差し変わる、コンテンツ更新らくらく仕様です。

これで、UWSCのEXEファイルをPCに仕込むことで、フルスクリーンでIEを起動し、定期的にリロードして、指定時間にスリープするデジタルサイネージ用PCとしての体裁が整いました。

できれば、これらに加えて
・安全のためキー操作などのハードウェアロック。
・PCのハードウェア情報などのログを取り、1日1回メールで送信。
・WEBカメラを仕込んで、立ち止まった人の数を計測。
・その時何を見ていたかと合せてレポート作成。
なども仕込んでおくと、これだけでも結構高機能なデジタルサイネージになりますね。安全な連続運転にはもっと色々気を遣う必要がありますが、デモとしては十分でしょう。
安価なWindowsベースのスティックPCの登場で夢が広がります。

本格的に動かすならならもうちょっと堅牢さが必要だと思います。自由度ではRasberry PiあたりでLinuxベースのシステムを組んだ方がいいような気もします。とりあえず、お手軽さを重視して、UWSCを使った構築例でした。