いろいろなサイトのURLが一覧で500程度あります(csvファイル)。
そのURLごとのページタイトルを、自動取得してくれるアプリケーションを探しています。
アプリケーションは、Windows用でもMac用でも、あるいはWeb上で使えるアプリでも何でも可です。
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 ""; } ?>
ありがとうございます。
求めていたものです!!!
例えば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だけにする事は可能ですか?(その方が処理が楽です)
ご回答ありがとうございます。
CSVファイルにはURL以外の情報は含まれてますが、URLだけにすることも可能です。
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/
ありがとうございます。
でもごめんなさい。これをどうすればいいかよくわかりません。プログラムの知識は乏しいので・・・
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すればショートカットとして保存できます。
タイトル取得までは出来たのですが、これをさらに書き出したりする方法が見つかりませんでした。
何か方法はありますか?
Webアプリケーションの意味を取り違えていたようです。PHPのプログラムを実行できる環境があれば、上記のソースをコピーしたgettitle.phpなどを作成し、URL一覧のテキストファイルとともに亜サーバーにアップロードしgettitle.phpを実行するだけなのですが・・・。
いずれにせよ、k_goriさんの回答によるとWWWCのような定番ソフトにも機能はあるようですね。そちらの方が簡単だと思います。
ダミーURL: http://q.hatena.ne.jp/1152753956
ありがとうございます。
先ほどの方のもので、解決いたしましたが、もう一度皆様のご回答を見直して、使いやすそうなものを利用させていただきます。
gong1971様はVBスクリプトをもしかしたら書いていただいているかもしれませんが、大変申し訳ないですが、ここで質問を終了したいと思います。
本当に皆様ありがとうございました。
おとなり質問
- 以下のURLについて質問です。 http://msdn2.microsoft.com/ja-jp/library/ms165433.aspx ClickOnceでは無いのですがIIS(Windows 2003 Server)からhttp(WebDav?)..
2
- Googleの検索を自動的に実行してくれるソフト・ツールを探しています。あるキーワードで検索をかけて、その検索結果に表示された上位10サイトのタイトルとURLを..
1
- ソースが公開されているJavaアプリケーションに手を加えてみたいです。 具体的には、SourceForgeにアップされている【FreeMind】です。 URL http://sourceforge...
3
- Twitterの利用方法および利用者の意識調査
450
- 現在、ヤフーオークションで商品を多数取引しております。商品の発送のラベル作成で佐川急便のe飛伝というソフトを使っているのですが、顧客情報の入力方法に手..
4
この質問・回答へのコメント
解決されたようなので良かったです。
(早い者勝ちなのは重々承知しておりますので。(^^))
lains_youさんの方法で気になったのが、
タイトル中に , が含まれるとcsvとしてExcelで開いた際に
そこで列が区切られてしまう可能性があります。
またタイトルの先頭に " が含まれる場合、
" が抜けてしまう事があります。
以上の点、お気を付けられたらと思います。
もったいないなぁ。
勉強の為、見たいです。(^^)
Ajax使ったのですか?
スクリプト作っていただけたのですか。
もしよろしければ、見せていただけると幸いです。
その場合、お礼としてポイントを送るとかってできるのでしょうか?
リンク先の方も修正してあります。
これで"と,への対応はできてますか?
<?
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サーバーで使えるようにしているのですが、何故か書き出されるタイトルの日本語が文字化けしてしまっていて、格闘中です(^_^;)
バッチシです!!csvって、この辺が面倒ですよね...。
(csvを入力する時はもっと面倒...)
> llusallさん、kidaikobayashiさん
単にWSH(Windows Script Host)のVBS(Visual Basic Script)で、
テキストファイルのURLを1つずつよんでIEで表示させ取得した
タイトルをURLと一緒にテキストファイル(CSV)に保存しただけ
なので、ホントにお粗末なものです。(Ajaxって言葉を知ったのはつい最近!(^^;;)
Webサーバ不要で、エディタ(メモ帳でもOK)さえあれば
利用、修正が可能なのが利点でしょうか。
(というか私はBASICしか書けません!(T_T))
ポイントを送る事自体は、[はてな]トップページから[Myはてな]の
[はてなポイント]タブに[ポイント送信]から可能ですが、
色々考えて(※)今回は辞退させてください。
また似たような質問があったら流用しようと思います。
(スクリプト書くのは嫌いじゃないんで、こちらも勉強になりました!)
※コメントだとはてな記法が使えない / コメントでポイントを頂くのは... などなど。
以下のように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
わかりました。いろいろありがとうございました。
>lains_youさん
文字化け、教えていただいた方法でかなり解決しました。ありがとうございました。
かなりという表現を使ったのは、一部のページのタイトルがまだ文字化け(設定した文字コードによっては文字抜け)しています。すべての日本語というわけではなく。一部のページの日本語だけなんですよね。
またいろいろと試してみます。
もし、どうしても解決しないようであれば、再度そのための質問をポイントを付けてしようと思います。