こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

トラックバック先のURLの抽出(ライブドアのブログにて)

以前の質問
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502
を参考にライブドアのブログにトラックバックされたブログのURLを取得するプログラムを、
以下のように作成しました。

class GetTBAddrLivedoor {

Pattern trackBack = Pattern.compile("<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");
while((aLine = reader.readLine())!=null){
// if(aLine.indexOf("tb_tab")>=0){
if(aLine.indexOf("<a name=\"trackback\">") >=0){
flag=true;
} else {
if(flag && aLine.indexOf("<a name=\"comments\">")>=0)


しかし、ライブドアでは、一度リニューアルをしまして、
それが原因でリニューアル前後のブログでは、HTMLの構造が変わり、
トラックバック先のURLの記述方法が異なるようになってしまっため、
URLを取得できないものもありました。

リニューアル後の新しいブログは、
<a target="_blank" href="http://blog.livedoor.jp/example/archives/500.html" class="posttitle">

リニューアル前の古いブログは、
<a class="atrackback-post" target="_blank" href="http://yaplog.jp/example/archive/178">
という記述になっています。

そこで、一度の処理で、リニューアル後と前のブログに対してトラックバックURLを取得させる、
新しいブログの場合には、
Pattern trackBack = Pattern.compile("<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");
古いブログには、
Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blank\" href=\"(http://.+)\">");
このようにして、全てのライブドアのブログに対応できるプログラムにするには、
プログラムをどのように改正すればよいでしょうか?

よろしくお願いします。

投稿日時 - 2005-11-03 01:04:39

QNo.1753421

すぐに回答ほしいです

質問者が選んだベストアンサー

>実行結果がnullになってしまいます。
それは、多分、
>m.group(1)+",";
がnullになるという意味ですよね?
実際に試してないのですが、
m.group(N)のNは、部分文字列としてパターンで()で囲まれた部分の位置を表しています。
なので、
前のパターンでマッチした場合
m.group(1)で、
後ろのパターンでマッチした場合
m.group(2)で、
取り出します。
m.find()でマッチしたということは既にわかっているので、
m.group(1)がnullの時は、m.group(2)を使うというようにすればいいかと思います。

投稿日時 - 2005-11-07 00:11:00

お礼

ご回答ありがとうございます。

無事URLを取得できました。

分かりやすい説明ありがとうございました。

投稿日時 - 2005-11-07 00:47:54

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

"パターン"|"パターン"
ではなくて
"パターン|パターン"

投稿日時 - 2005-11-04 03:47:12

お礼

何度もすみません。

一応、ご指摘のように改正してプログラムを実行したのですが、
プログラムは動くのですが、
条件の後者の場合のときは、実行結果がnullとなってしましました。
例えば、

"パターン1|パターン2"

としたとき、パターン2の場合は実行結果がnullになってしまいます。

条件を入れ替える、つまり
"パターン2|パターン1"
にするとURLを表示してくれます。

解決方法をお願いします。

ちなみにリニューアル後のブログの例として以下を
http://blog.livedoor.jp/takapon_ceo/archives/50030785.html
リニューアル前のブログとして以下を試しました。
http://blog.livedoor.jp/kuroemon21/archives/50174493.html

投稿日時 - 2005-11-04 23:45:42

ANo.1

正規表現のパターン指定で、
パターン1|パターン2
のように指定できます。
どっちかがマッチするのであればそれでいけると思います。

投稿日時 - 2005-11-03 02:00:52

お礼

ご回答ありがとうございます。

以下のように改正したのですが、

Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blank\" href=\"(http://.+)\">"|"<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");

エラーとして

GetTBAddrLivedoor.java:15: 演算子 | は java.lang.String,java.lang.String に適用
できません。
Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blan
k\" href=\"(http://.+)\">"|"<a target=\"_blank\" href=\"(http://.+)\" class=\"po
sttitle\">");

となりました。

正規表現のパターン指定が間違っているのでしょうか?

お願いします。

投稿日時 - 2005-11-03 15:34:16

あなたにオススメの質問