いろいろなサイトのURLが一覧で500程度あります(csvファイル)。

そのURLごとのページタイトルを、自動取得してくれるアプリケーションを探しています。
アプリケーションは、Windows用でもMac用でも、あるいはWeb上で使えるアプリでも何でも可です。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2006/07/13 10:25:57
  • 終了:2006/07/13 11:41:41

ベストアンサー

id:lains_you No.4

lains_you回答回数50ベストアンサー獲得回数102006/07/13 11:32:33

ポイント30pt

http://stylet.sakura.ne.jp/gettitle.html

 上記のページの上の段にurl,url,……と入力して実行ボタンを押下すると、下の段にurl,title\nurl,title\n……の形式で出力されます。


html

<html>
<head>
<script type="text/javascript" src="prototype-1.4.0.js"></script>
<script type="text/javascript">
var ary = new Array();
function exe(){
	$("dst").value = "";
	ary = $("src").value.split(",");
	getTitle();
}
function getTitle(){
	if( ary.length == 0 ){
		return;
	}

	var url = ary[0];
	ary = ary.slice(1);
	
	new Ajax.Request(
		"gettitle.php",
		{
			method		: "get",
			parameters	: "url=" + url,
			onSuccess	: function( res ){
				$("dst").value += res.responseText + "\n";
				getTitle();
			},
			onFailure	: function( res ){
				alert( res.toSource() );
			},
			onException	: function( res, ex ){
				alert( ex + " " + ex.message );
			}
		});
}
</script>
</head>
<body>

<input id="src" type="text" style="width:90%;height:45%;">
<button onclick="exe();">実行</button>
<br>
<textarea id="dst" style="width:90%;height:45%;"></textarea>

</body>

php

<?
if( isset($_GET[url]) ){
	echo $_GET[url].",".getTitle(urldecode($_GET[url]));
}

function getTitle( $url ){
	if( ereg("^http://",$url) ){
		$text = file_get_contents( $url );
		if( eregi("<title>.+</title>", $text, $regs) ){
			$title = eregi_replace("<.?title>", "", $regs[0]);
			$title = mb_convert_encoding($title, 'UTF-8', 'auto');
			return $title;
		}
	}
	return "";
}
?>
id:kidaikobayashi

ありがとうございます。

求めていたものです!!!

2006/07/13 11:37:21

その他の回答(4件)

id:gong1971 No.1

gong1971回答回数443ベストアンサー獲得回数682006/07/13 11:06:00

ポイント30pt

例えばURLだけを抜き出しエディタなどで前後を [ と :title] で挟んで、(下記例参照)

http://q.hatena.ne.jp/1152753956
↓
[http://q.hatena.ne.jp/1152753956:title]

※秀丸エディタなど正規表現で置換が出来るエディタであれば、
 ¥n を :title]¥n[ に置換すると一気に処理できます。
 (¥は半角で入力してください。)

これを「はてなダイアリー」で「日記を書く」として、[編集]タブに貼り付け、

[プレビュー]タブで見ればタイトルに変換してくれます。

(500個一気にやると負担を掛けるので50個程度に分割した方が良さそう...)

はてなダイアリー


ただ100文字を超えると省略されてしまうのと、文字化けする事があるんですよね...。

この程度の処理であればWSHのVBSで(私が)スクリプトを組む事も出来るかと思いますが、

CSVファイルにはURL以外の情報も含まれますか?含まれる場合、何列データがあり、

何列目にURLが書かれていますか?また、URLだけにする事は可能ですか?(その方が処理が楽です)

id:kidaikobayashi

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

CSVファイルにはURL以外の情報は含まれてますが、URLだけにすることも可能です。

2006/07/13 11:20:09
id:k6nch6n No.2

k6nch6n回答回数171ベストアンサー獲得回数112006/07/13 11:07:16

ポイント30pt

PHPだとこんな感じでしょうか。

2行目のパスは適当に置き換えてください。

この例では、url.txtは1行に1つのURLが書かれているテキストファイルです。

<?php
if (!($fp = fopen('/full/path/to/url.txt', 'r'))) {
  print 'File could not be opened.';
  die;
}
while (!feof($fp)) {
  $line = rtrim(fgets($fp, 32000));
  if (!($fp2 = fopen($line, 'r'))) {
    print 'URL could not be opened.';
    die;
  }
  while (!feof($fp2)) {
    $line2 = fgets($fp2, 32000);
    if (ereg('<title>', $line2)) {
      list($dummy, $title, $dummy) = split('<title>|</title>', $line2);
      $title = htmlspecialchars(mb_convert_encoding($title, 'UTF-8', 'UTF-8,EUC-JP,SJIS'));
      print $line.','.$title.'<br/>';
    }
  }
  fclose($fp2);
}
fclose($fp);
?>

ダミーURL: http://www.php.net/

id:kidaikobayashi

ありがとうございます。

でもごめんなさい。これをどうすればいいかよくわかりません。プログラムの知識は乏しいので・・・

2006/07/13 11:23:59
id:k_gori No.3

k_gori回答回数97ベストアンサー獲得回数62006/07/13 11:14:21

ポイント30pt

http://www.forest.impress.co.jp/lib/inet/websupt/webpilot/wwwc.h...

Windows用のソフトです。

URLを改行で区切ったテキストに変換して、このソフトに貼り付け、アイテムを全て選択した状態で右クリックの[タイトル取得]で出来ます。フォルダごとデスクトップなどにD&Dすればショートカットとして保存できます。

id:kidaikobayashi

タイトル取得までは出来たのですが、これをさらに書き出したりする方法が見つかりませんでした。

何か方法はありますか?

2006/07/13 11:32:00
id:lains_you No.4

lains_you回答回数50ベストアンサー獲得回数102006/07/13 11:32:33ここでベストアンサー

ポイント30pt

http://stylet.sakura.ne.jp/gettitle.html

 上記のページの上の段にurl,url,……と入力して実行ボタンを押下すると、下の段にurl,title\nurl,title\n……の形式で出力されます。


html

<html>
<head>
<script type="text/javascript" src="prototype-1.4.0.js"></script>
<script type="text/javascript">
var ary = new Array();
function exe(){
	$("dst").value = "";
	ary = $("src").value.split(",");
	getTitle();
}
function getTitle(){
	if( ary.length == 0 ){
		return;
	}

	var url = ary[0];
	ary = ary.slice(1);
	
	new Ajax.Request(
		"gettitle.php",
		{
			method		: "get",
			parameters	: "url=" + url,
			onSuccess	: function( res ){
				$("dst").value += res.responseText + "\n";
				getTitle();
			},
			onFailure	: function( res ){
				alert( res.toSource() );
			},
			onException	: function( res, ex ){
				alert( ex + " " + ex.message );
			}
		});
}
</script>
</head>
<body>

<input id="src" type="text" style="width:90%;height:45%;">
<button onclick="exe();">実行</button>
<br>
<textarea id="dst" style="width:90%;height:45%;"></textarea>

</body>

php

<?
if( isset($_GET[url]) ){
	echo $_GET[url].",".getTitle(urldecode($_GET[url]));
}

function getTitle( $url ){
	if( ereg("^http://",$url) ){
		$text = file_get_contents( $url );
		if( eregi("<title>.+</title>", $text, $regs) ){
			$title = eregi_replace("<.?title>", "", $regs[0]);
			$title = mb_convert_encoding($title, 'UTF-8', 'auto');
			return $title;
		}
	}
	return "";
}
?>
id:kidaikobayashi

ありがとうございます。

求めていたものです!!!

2006/07/13 11:37:21
id:k6nch6n No.5

k6nch6n回答回数171ベストアンサー獲得回数112006/07/13 11:32:47

ポイント10pt

Webアプリケーションの意味を取り違えていたようです。PHPのプログラムを実行できる環境があれば、上記のソースをコピーしたgettitle.phpなどを作成し、URL一覧のテキストファイルとともに亜サーバーにアップロードしgettitle.phpを実行するだけなのですが・・・。

いずれにせよ、k_goriさんの回答によるとWWWCのような定番ソフトにも機能はあるようですね。そちらの方が簡単だと思います。

ダミーURL: http://q.hatena.ne.jp/1152753956

id:kidaikobayashi

ありがとうございます。

先ほどの方のもので、解決いたしましたが、もう一度皆様のご回答を見直して、使いやすそうなものを利用させていただきます。

gong1971様はVBスクリプトをもしかしたら書いていただいているかもしれませんが、大変申し訳ないですが、ここで質問を終了したいと思います。

本当に皆様ありがとうございました。

2006/07/13 11:40:17
  • id:gong1971
    一応スクリプトは作成し完成したのですが、
    解決されたようなので良かったです。
    (早い者勝ちなのは重々承知しておりますので。(^^))

    lains_youさんの方法で気になったのが、
    タイトル中に , が含まれるとcsvとしてExcelで開いた際に
    そこで列が区切られてしまう可能性があります。
    またタイトルの先頭に " が含まれる場合、
    " が抜けてしまう事があります。

    以上の点、お気を付けられたらと思います。
  • id:llusall
    >一応スクリプトは作成し完成したのですが、

    もったいないなぁ。
    勉強の為、見たいです。(^^)

    Ajax使ったのですか?

  • id:kidaikobayashi
    gong1971さん

    スクリプト作っていただけたのですか。
    もしよろしければ、見せていただけると幸いです。

    その場合、お礼としてポイントを送るとかってできるのでしょうか?
  • id:lains_you
    項目をダブルクォーテーションで括ってみました。
    リンク先の方も修正してあります。
    これで"と,への対応はできてますか?

    <?
    if( isset($_GET[url]) ){
    echo "\"".$_GET[url]."\",\"".getTitle(urldecode($_GET[url]))."\"";
    }

    function getTitle( $url ){
    if( ereg("^http://",$url) ){
    $text = file_get_contents( $url );
    if( eregi("<title>.+</title>", $text, $regs) ){
    $title = eregi_replace("<.?title>", "", $regs[0]);
    $title = mb_convert_encoding($title, 'UTF-8', 'auto');
    $title = ereg_replace("\"", "\"\"", $title);
    return $title;
    }
    }
    return "";
    }
    ?>
  • id:kidaikobayashi
    質問者です。

    lains_youさん
    修正ありがとうございました。
    確認してみましたら、"と,への対応はバッチリでした。

    今、ソースコードから、こちらのWebサーバーで使えるようにしているのですが、何故か書き出されるタイトルの日本語が文字化けしてしまっていて、格闘中です(^_^;)
  • id:gong1971
    > lains_youさん

    バッチシです!!csvって、この辺が面倒ですよね...。
    (csvを入力する時はもっと面倒...)

    > llusallさん、kidaikobayashiさん

    単にWSH(Windows Script Host)のVBS(Visual Basic Script)で、
    テキストファイルのURLを1つずつよんでIEで表示させ取得した
    タイトルをURLと一緒にテキストファイル(CSV)に保存しただけ
    なので、ホントにお粗末なものです。(Ajaxって言葉を知ったのはつい最近!(^^;;)

    Webサーバ不要で、エディタ(メモ帳でもOK)さえあれば
    利用、修正が可能なのが利点でしょうか。
    (というか私はBASICしか書けません!(T_T))

    ポイントを送る事自体は、[はてな]トップページから[Myはてな]の
    [はてなポイント]タブに[ポイント送信]から可能ですが、
    色々考えて(※)今回は辞退させてください。

    また似たような質問があったら流用しようと思います。
    (スクリプト書くのは嫌いじゃないんで、こちらも勉強になりました!)

    ※コメントだとはてな記法が使えない / コメントでポイントを頂くのは... などなど。
  • id:lains_you
    >>kidaikobayashiさん

    以下のようにecho行の前にheader関数を追加するか、
    mb_convert_encoding関数のUTF-8の部分を他のエンコーディングに
    変えると行けるかもしれません。

    if( isset($_GET[url]) ){
    header("Content-Type: text/plain; charset=UTF-8");
    echo "\"".$_GET[url]."\",\"".getTitle(urldecode($_GET[url]))."\"";
    }


    >>gong1971さん
    確かに。入力の自力実装は無理ですorz
  • id:kidaikobayashi
    >gong1971さん
    わかりました。いろいろありがとうございました。

    >lains_youさん
    文字化け、教えていただいた方法でかなり解決しました。ありがとうございました。
    かなりという表現を使ったのは、一部のページのタイトルがまだ文字化け(設定した文字コードによっては文字抜け)しています。すべての日本語というわけではなく。一部のページの日本語だけなんですよね。
    またいろいろと試してみます。
    もし、どうしても解決しないようであれば、再度そのための質問をポイントを付けてしようと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません