ようこそゲスト さん ユーザー登録 ログイン

いろいろなサイトのURLが一覧で500程度あります(csvファイル)。
そのURLごとのページタイトルを、自動取得してくれるアプリケーションを探しています。
アプリケーションは、Windows用でもMac用でも、あるいはWeb上で使えるアプリでも何でも可です。

  • kidaikobayashi
  • 状態:終了 いるか あなたも質問に答えられます!

4 回答者:lains_you 2006-07-13 11:32:33 満足! 30ポイント

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 "";
}
?>
質問者:kidaikobayashi 2006-07-13 11:37:21

ありがとうございます。

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

1 回答者:gong1971 2006-07-13 11:06:00 満足! 30ポイント

例えば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だけにする事は可能ですか?(その方が処理が楽です)

質問者:kidaikobayashi 2006-07-13 11:20:09

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

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

2 回答者:k6nch6n 2006-07-13 11:07:16 満足! 30ポイント

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/

質問者:kidaikobayashi 2006-07-13 11:23:59

ありがとうございます。

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

3 回答者:k_gori 2006-07-13 11:14:21 満足! 30ポイント

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

Windows用のソフトです。

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

質問者:kidaikobayashi 2006-07-13 11:32:00

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

何か方法はありますか?

5 回答者:k6nch6n 2006-07-13 11:32:47 満足! 10ポイント

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

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

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

質問者:kidaikobayashi 2006-07-13 11:40:17

ありがとうございます。

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

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

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

おとなり質問

この質問・回答へのコメント

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

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

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

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

Ajax使ったのですか?

gong1971さん

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

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

<?
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 "";
}
?>
質問者です。

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

今、ソースコードから、こちらのWebサーバーで使えるようにしているのですが、何故か書き出されるタイトルの日本語が文字化けしてしまっていて、格闘中です(^_^;)
> 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はてな]の
[はてなポイント]タブに[ポイント送信]から可能ですが、
色々考えて(※)今回は辞退させてください。

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

※コメントだとはてな記法が使えない / コメントでポイントを頂くのは... などなど。
>>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
>gong1971さん
わかりました。いろいろありがとうございました。

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

この質問・回答へのトラックバックこの質問・回答へのトラックバック

GONGON VOICEGONGON VOICE 2007-07-07 16:24:21