ブログのHTMLからトラックバックURLを抽出する方法とは?

このQ&Aのポイント
  • ブログのHTMLからトラックバックをしたブログのURLを抽出する方法について教えてください。
  • 特に、同じURLが重複して出力されないようにする方法が知りたいです。
  • 楽天などの特定のブログでは、同じURLが重複している場合があるので、その対策方法も教えてください。
回答を見る
  • ベストアンサー

ブログのHTMLからトラックバックをしたブログのURLの抽出(URLの重複抽出を避けたい)

いつもお世話になっています。 先日、「ブログのHTMLからトラックバックをしたブログのURLの抽出」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502 の質問にてのご回答を参考にプログラムを作成しました。 ところで、ブログによってはトラックバック先のURLを紹介するときに、 トラックバック先のブログの記事のタイトル・そのブログタイトル名やmoreなどの表示によって、 トラックバックの先のURLのリンクがHTML中に二つ以上出てくるものもあります。 例えば、楽天では、以下のHTMLのように同じURLが重複しています。 <html> <head> … <a name="trackback"></a> <H4 class="h4"> <TABLE border="0" cellpadding="0" cellspacing="0" width="100%"><TR><TD> <a href="http://plaza.rakuten.co.jp/example/20051020/" target="_blank"></a> </TD><TD align="right"> <a href="http://plaza.rakuten.co.jp/example/20051020" target="_blank </a> </TD></TR></TABLE> /div> <br /> <H4 class="h4"> <TABLE border="0" cellpadding="0" cellspacing="0" width="100%"><TR><TD> <a href="http://blogs.dion.ne.jp/example/archives/2121894.html" target="_blank"> </a> </TD><TD align="right"> <a href="http://blogs.dion.ne.jp/example/archives/2121894.html" target="_blank">TORACCHO'S ROOM E-Package2</a> </TD></TR></TABLE> </H4> … </body> </html> そこで、同じURLを重複して抽出しないようにするには、 どのようにプログラムを改正すればよいのでしょうか? よろしくお願いします。

  • shows
  • お礼率96% (48/50)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

データを取り出している間には、現在格納しつつあるものが重複しているかどうかわからないが、格納した結果は重複しないものであるということを保証するような場合は、格納するものとしてSetを使います。 サンプル: import java.util.*; class Sample { public static void main(String args[]){ String data[] = {"abc","EFG","abc","ZZZ","efg"}; TreeSet<String> aSet = new TreeSet<String>(); for(String str : data) aSet.add(str); for(String str : aSet){ System.out.println(str); } } } サンプルでは、重複しているモノがあるデータをSetに追加していますが、重複されているものは、重複して追加されません。 そこで、元のプログラムで、 String[]を返していますが、 TreeSet<String>を返す様にし >String addr=""; を TreeSet<String> addr = new TreeSet<String>(); にして >addr+=m.group(1)+","; を addr.add(m.group(1)); にして return addr; にすればいいと思います。

shows
質問者

お礼

ご回答ありがとうございます。 分かりやすい説明で理解が深まりました。

関連するQ&A

  • ブログのHTMLからトラックバックをしたブログのURLの抽出

    ブログのHTMLから、そのブログのある記事に トラックバックをしたブログのURLを抽出するプログラムを作りたいと思います。 例えば、URLがhttp://blogs.yahoo.co.jp/example/1234というヤフーのブログの記事に、 http://blog.goo.ne.jp/example/1234 http://blogs.yahoo.co.jp/example2.html の二つのブログがトラックバックをしたとします。 このヤフーのブログの記事のHTMLは以下のようになります。 <html> <head> … <style="display:none">http://blogs.yahoo.co.jp/example/1234/trackback</div> … <tr id="tb_tab" style="display:block"> … <b><a href="http://blog.goo.ne.jp/example/1234" target=_blank>…</a></b> … <b><a href="http://blogs.yahoo.co.jp/example2.html" target=_blank>…</a></b> … </body> </html> そこで、トラックバックをしたURLを抽出するときに、 例えば、http://blog.goo.ne.jp/example/1234を抽出するのに、 target=_blankを参照して、 HTML中の<a href="http://blog.goo.ne.jp/example/1234" target=_blank>から http://blog.goo.ne.jp/example/1234を抜き出すようにして、 トラックバック先のURLを抽出するプログラムを作成したいです。 このようなプログラムを作成するにはどのようにプログラムを組めばいいのでしょうか? また、HTML中には、target=_blankで参照すると、以下のような <a href="http://rd.yahoo.co.jp/rss/b/blog/myblog/rss2/01/*http://blogs.yahoo.co.jp/example/rss.xml" target=_blank> [<a href="/example2/5242000" target=_blank> 余分な情報も抜き出してしまうので、上記を抽出しないように、 rssを含むもの、http:で始まらないものは抽出しないという条件で抽出できるようなら、 こちらの方法も教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • トラックバック先の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://.+)\">"); このようにして、全てのライブドアのブログに対応できるプログラムにするには、 プログラムをどのように改正すればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • ブログのHTMLからtrackback:pingの抽出(HTMLにrdf要素がないブログ)

    以前、「ブログのHTMLからtrackback:pingを抽出したい」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1710072 の質問をしたものです。 前の質問でしたように、一般的なブログでは、trackback ping URLは、 ブログの記事のHTMLの中の、rdf:Description要素の中の、 trackback:pingのところに記述されています。 しかし、上記に当てはまらないブログもありました。 例えば、ヤプログやドリコムブログです。 これらのブログでは、HTML中でrdf:Description要素自体が記述されておらず、 以下のような形でtrackback ping URLが記述されています。 例)ヤプログ(trackback ping URLはhttp://yaplog.jp/example/tb_ping/22) <html lang="ja"> <head> <title> … <td width="5" background="/blog/template/37/img/entryl.gif">&nbsp;</td> <td> <table width="350" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="entry_text"> この記事へのトラックバックURL<br /> http://yaplog.jp/example/tb_ping/22<br><br> <div class="comment_layer"> </div>  </td> </tr> </table> </td> <td width="5" background="/blog/template/37/img/entryr.gif">&nbsp;</td> </tr> <tr> … </body> </html> このようなHTMLからtrackback ping URLである、 http://yaplog.jp/example/tb_ping/22を抽出したいです。 ブログの記事のURLを入力して、 そのブログの記事のtrackback ping URLを取得するには、 どのようにプログラムを組めばいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • HTMLからURL部分を取り出したい。

    HTMLからTABLE情報をもとにURLを取り出したいのですが。 <TABLE> <TR> <TD><SMALL><B><A href="http://23336.html">11111</A></B></SMALL></TD></TR> <TR> <TD><SMALL><B><A href="http://23632.html">22222</A></B></SMALL></TD></TR> <TR> <TD><SMALL><B><A href="http://22152.html">33333<A></B></SMALL></TD></TR> </TABLE> のような書式から URL 部分を取り出したいのですが、うまくいきません。 Table = IE.document.all.tags("TABLE") for i = 0 to table.rows.length - 1  for j = 0 to table.rows.item(i).cells.length - 1    url = table.rows.item(i).cells.item(j).childNodes.item(0).href  next j next i .href ---> .innertext にすれば文字情報は取り出せます。 <SMALL> や <B> が入っていなければurlが正常に取り出せます。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • 同じブログサービスでもHTMLの構造が異なるブログからのトラックバック先のURLの取得

    以前の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502 のNo.4のご回答を参考にして、 ブログのHTMLからトラックバックをしたブログのURLの取得するプログラムを作成しています。 しかし、ブログサービスによってはリニューアルの関係か、 新しいブログと古いブログではHTMLの構造が変わってしまい、 一つのプログラムでは対応できない場合がでてきました。 例えば、ヤプログを例にして説明します。 こちらのヤプログのブログhttp://yaplog.jp/lovery-honey/archive/27 のように比較的古くからのブログであれば 参考プログラムの正規表現のところを、 以下のようにすると、URLを取得できるのですが、 Pattern trackBack = Pattern.compile("<a href=\"(http://.+)\" target=\"_blank\">"); while((aLine = reader.readLine())!=null){ if(aLine.indexOf("<a id=\"trackback\">") >=0){ flag=true; } else { if(flag && aLine.indexOf("<!-- pings -->")>=0) break; } こちらのブログhttp://yaplog.jp/chikako/archive/19 のように比較的新しいブログでは、 HTMLの構造が変わってしまい、 Pattern trackBack = Pattern.compile("<a href=\"(http://.+)\" target=\"_blank\">"); while((aLine = reader.readLine())!=null){ if(aLine.indexOf("<a name=\"tb\">") >=0){ flag=true; } else { if(flag && aLine.indexOf("<div class=\"main_cl\">")>=0) break; } と、正規表現を上記のように記述しないとURLを取得できません。 そこで、ひとつのプログラムで、上記の二つのケースに対応するようにするには、 正規表現をどのように記述して、プログラムを改正すればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • トラックバック先のURLのみ抽出したい(Excite・Sonetにて)

    いつもお世話になっています。 以前の「ブログのHTMLからトラックバックをしたブログのURLの抽出」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502 の質問をしたものです。 No.4のご回答を参考にExiteのブログからトラックバック先のURLの抽出するプログラムを 教えていただいたプログラムを以下のように変更し、 class GetTBAddrExcite { … Pattern trackBack = Pattern.compile("<A HREF=(http://.+) TARGET=_NEW>"); while((aLine = reader.readLine())!=null){ // if(aLine.indexOf("tb_tab")>=0){ if(aLine.indexOf("<IMG SRC=http://md.exblog.jp/img/eg/ico_comment.gif WIDTH=9 HEIGHT=9>") >=0){ flag=true; } else { if(flag && aLine.indexOf("<DIV CLASS=COMMENT_INPUT>")>=0) … 実行したのですが、(例としてExcite社長の記事http://blog.excite.co.jp/yamamura/2415166/を対象とした) 結果として以下のように帰ってきてしまいました。 http://www.excite.co.jp/exblog/faq/?kind=general&id=6 TARGET=_NEW>繝倥Ν繝?/A></ B>]<BR> </DIV><DIV CLASS=COMMENT_LINE></DIV><DIV CLASS=COMMENT_TAIL><IMG SRC=htt p://md.exblog.jp/img/eg/ico_comment.gif WIDTH=9 HEIGHT=9> Tracked from <A HREF= http://example.exblog.jp/1614266 TARGET=_NEW><B>blog 貍ア遏ウ繧オ繝ュ繝ウ 繝ゥ..</B> </A> at 2005-10-28 09:51</DIV><DIV CLASS=COMMENT_BODY>繧ソ繧、繝医Ν : <A HREF=htt p://example.exblog.jp/1614266 … 抽出したいのは、http://example.exblog.jp/1614266なのですが、 HTMLの構造上のためか、余計な情報までも抽出してしまいます。(So-netも同じような問題が起きます) 抽出したいURLのみ取得させるには、 プログラムをどのように改正させればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • FC2のブログで HTML

    新規投稿した際に、画像のソース下にテーブルを配置したのですが、画像とテーブルの間に広い空白ができてしまいます。空白をなくすにはどのようにすればよいのでしょうか? <a href="http://blog-imgs-37.fc2.com/h/i/r/xxx/xxx-img600x448-1291282057iczrmy28164.jpg" target="_blank"><img src="http://blog-imgs-37.fc2.com/h/i/r/xxx/xxxi-img600x448-1291282057iczrmy28164s.jpg" alt="" border="0" width="119" height="89" /></a> <table width="400" border="1"> <tr> <th scope="col">価格A</th> <th scope="col">価格B</th> <th scope="col">価格C</th> </tr> <tr> <td>1,500</td> <td>2,000</td> <td>未</td> </tr> </table>

    • ベストアンサー
    • HTML
  • HTMLのリンクアンカーがおかしい???

    開発中にふと気が付いたことなのですが、以下のソースをブラウザ(IE5.0)で表示すると、aaaだけ、TABLE内のアンカーの左右でもリンクするようになってしまうのですが、なぜなのでしょうか??? <html> <head></head> <body> <table border=0 cellpadding=3 width=730> <tr><td align=center><a href="help_10.asp" target="right"><h2>aaa</h2></a></td></tr> <tr><td align=center><a href="help_20.asp" target="right"><h2>bbb</h2></a></td></tr> <tr><td align=center><a href="help_35.asp" target="right"><h2>ccc</h2></a></td></tr> </table> </body> <html>

  • HTMLで書かれた二つの表をブログで横に並べたいのですが…

    こんばんは。 ブログの中で、HTMLで書かれた表(テーブル?)を横に並列に並べたいのですが、 どうしてもタテ(上下)に並んでしまい、困っています。 ブログのエントリ部分の横幅は、十分にありますので、 あとはHTMLの記述でどうにかならないかと思っているのですが…。 以下に、ソースを貼りつけておきます。 これは表(テーブル)一つ分のソースで、 これと同じような表を、もう一つヨコに並べたいのです。 ちなみに、こういったサイトで作成した表(サッカーのフォーメーション)です。 http://tf.loopshoot.com/ なお、ブログはMovable Typeを使用しています。 どうぞよろしくお願いいたします。 <!-- TextFormations --> <div style="text-align:center; margin:0; width:200pt; font-size:9.0pt;" > アルビレックス新潟 (J1 6節 vsサンフレッチェ広島) </div> <div id="fhead" style="margin:0 ;padding: 15pt 3pt 8pt 3pt; border: 1px solid rgb(0,102,255); background: rgb(255,255,255); color:#666; width:200pt;"> <table id="f_table" border="0" cellpadding="0" cellspacing="0" style=" color:#666; border-collapse:collapse; table-layout:fixed; width:200pt; font-size:9.0pt; "> <!-- FW --> <tr style="height:13.5pt;"> <td > </td> <td colspan="2" id="tb_10" style="text-align:center;vertical-align:top; padding:1pt 20pt;" > 16.大島秀夫(20.チョ・ヨンチョル) </td> <td > </td> </tr> <tr style="height:20.5pt;"> <td colspan="2" id="tb_9" style="text-align:left; vertical-align:top; padding:1pt 25pt 1pt 10pt;"> 9.ペドロ・ジュニオール </td> (途中、略) <!-- GK --> <tr style="height:13.5pt;"> <td > </td> <td colspan="2" style="text-align:center;padding:1pt 20pt;" > 1.北野貴之 </td> <td > </td> </tr><!-- GK fini --> </table> </div> <div id="tfooter" style="letter-spacing:normal; text-align:center; width:200pt; margin:0; font-size:8.5pt; "> created by <a href="http://tf.loopshoot.com/" target="_blank"> :TextFormations</a> <a href="http://tf.loopshoot.com/more_info.pl?fid=1p356tq5ZH" target="_blank"> :more info </a> <a href="http://tf.loopshoot.com/members.pl?fid=1p356tq5ZH" target="_blank"> :R</a> </div>

  • トラックバックURLだけを抽出するツール知りませんか?

    自分のブログと関連ありそうなブログにトラックバックを したいと思うのですが、一つ一つ調べてトラックバック申請を するのではなくて、何か検索して、トラックバックのURLだけ 抽出できるようなツールってないでしょうか? 知っていたらおしえてください。