Mac De PL/SQL RSS Reader #10 Tweet
FEEDフォーマットの判定テストの結果。これで、FEEDフォーマットの判定はできるようになった。
URL:http://megawatt.blogdns.net/blog/rdf91_xml
FEEDフォーマット:RSS version = 0.91URL:http://technology.amis.nl/blog/?feed=rss
FEEDフォーマット:RSS version = 0.92URL:http://megawatt.blogdns.net/blog/rdf10_xml
FEEDフォーマット:RDF version =URL:http://miwa2006.exblog.jp/index.xml
FEEDフォーマット:RSS version = 2.0URL:http://atsu-log.way-nifty.com/today_s_menu/atom.xml
FEEDフォーマット:ATOM version = 0.3URL:https://discus-hamburg.cocolog-nifty.com/mac_de_oracle/atom.xml
FEEDフォーマット:ATOM version =
今回のテストで使ったソースコードは以下。
CREATE OR REPLACE PROCEDURE RSS_FEED_READER_TEST
(
i_url IN VARCHAR2
)
AS
--============ TYPEs/VARIABLEs ===============================================
C_RSS CONSTANT VARCHAR2(7) := 'rss';
C_RDF CONSTANT VARCHAR2(7) := 'rdf:RDF';
C_ATOM CONSTANT VARCHAR2(7) := 'feed';
C_ATTR_NAME_VERSION CONSTANT VARCHAR2(7) := 'version';
v_url VARCHAR2(1024);
v_myParser DBMS_XMLPARSER.Parser;
v_rssDoc DBMS_XMLDOM.DomDocument;
v_itemNode DBMS_XMLDOM.DomNode;
v_childnode DBMS_XMLDOM.DomNode;
v_rssEntryList DBMS_XMLDOM.DomNodeList;
v_rssItemFields DBMS_XMLDOM.DomNodeList;
v_attrNamedNodeMap DBMS_XMLDOM.DomNamedNodeMap;
v_childNodeText VARCHAR2(32767);
-- FEEDのフォーマット(RSS/RDF/ATOM)を判別するためのルート要素のタグ名
v_rootElementTagName VARCHAR2(10);
-- RSS/RDF/ATOMのversion
v_version VARCHAR2(10);
-- for UTL_HTTP
v_req UTL_HTTP.REQ;
v_resp UTL_HTTP.RESP;
-- HTTP経由でRSS/ATOMソースを取り込むためのワーク
v_source VARCHAR2(1024);
v_tempSourceClob CLOB := NULL;
--
BEGIN
DBMS_OUTPUT.ENABLE(200000);
v_url := i_url;
-- FEEDを取得し、一時CLOBへ書き出す。(URL指定パースでの文字化け回避策)
v_req := UTL_HTTP.BEGIN_REQUEST(v_url);
UTL_HTTP.SET_HEADER(v_req, 'User-Agent', 'Oracle UTL_HTTP/Oracle10g R1;');
UTL_HTTP.SET_HEADER(v_req, 'Content-Type', 'text/xml;charset=UTF-8');
v_resp := UTL_HTTP.GET_RESPONSE(v_req);
DBMS_LOB.CREATETEMPORARY(v_tempSourceClob, FALSE);
BEGIN
LOOP
UTL_HTTP.READ_LINE(v_resp, v_source, true);
v_source := v_source || UTL_TCP.CRLF;
DBMS_LOB.WRITEAPPEND(v_tempSourceClob, LENGTH(v_source), v_source);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(v_resp);
END;
v_myParser := DBMS_XMLPARSER.NEWPARSER();
DBMS_XMLPARSER.PARSECLOB(v_myParser, v_tempSourceClob);
v_rssDoc := DBMS_XMLPARSER.GETDOCUMENT(v_myParser);
v_rootElementTagName :=
DBMS_XMLDOM.GETTAGNAME
(
DBMS_XMLDOM.GETDOCUMENTELEMENT(v_rssDoc)
);
v_version :=
DBMS_XMLDOM.GETVALUE
(
DBMS_XMLDOM.GETATTRIBUTENODE
(
DBMS_XMLDOM.GETDOCUMENTELEMENT(v_rssDoc),
C_ATTR_NAME_VERSION
)
);
DBMS_OUTPUT.PUT_LINE('URL:' || i_url);
CASE v_rootElementTagName
WHEN c_atom THEN
DBMS_OUTPUT.PUT_LINE('FEEDフォーマット:ATOM' || ' version = ' || v_version);
WHEN c_rss THEN
DBMS_OUTPUT.PUT_LINE('FEEDフォーマット:RSS ' || ' version = ' || v_version);
WHEN c_rdf THEN
DBMS_OUTPUT.PUT_LINE('FEEDフォーマット:RDF ' || ' version = ' || v_version);
ELSE
RAISE_APPLICATION_ERROR(-20000,'ありえねぇー');
END CASE;
DBMS_LOB.FREETEMPORARY(v_tempSourceClob);
DBMS_XMLPARSER.FREEPARSER(v_myParser);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm());
IF v_tempSourceClob IS NOT NULL THEN
DBMS_LOB.FREETEMPORARY(v_tempSourceClob);
END IF;
DBMS_XMLPARSER.FREEPARSER(v_myParser);
RAISE;
END RSS_FEED_READER_TEST;
聞いている曲:
Gary NumanのDance。当時、JapanのメンバーであったMick Karn をフィーチャーしたアルバム。1981年リリース。Gentlemen Take PolaroidsをイメージさせるMick Karnのサックスとフレットレスベースが気持ちいい。 Gary Numanの声は好き嫌いがハッキリとでると思うけど。。。
| 固定リンク | 0
コメント