2007年12月アーカイブ
ブログやニュースはいつもRSSリーダーをつかって見ているのですが、ちょっと空いた時間に見たいということがあります。その場合、携帯メールに送信できたらと考えていました。
せっかくなのでRubyでRSSフィードを取得しDBに登録、定期的にメール配信するプログラムを作ろう考えていたところ、そういったサービスが既に存在する気付きました。(まぁ、、、やっぱりという感じなのですが・・・せっかく作ろうと思っていたのに。。。)
ただこのサービスすごくいいです。RSSがメールで配信されるだけではありません。以下に簡単に機能を紹介します。

サイト名 : MyRSS (http://myrss.jp)
運営会社: サイドフィード株式会社
MyRSSサービス概要
2)データベースにサイト登録時のテキストリンクを格納しておく(マッチすれば新着ニュースではないと判断)
3)登録できるサイトは10まで、クロールは1-3時間に1回程度(というか充分すぎるでしょう)
2)配信スケジュールは5つまで登録できる(更新されてない場合は「ない」というメールがとぶ)
3)メールのボリュームは、登録したサイトの更新内容全てなのでとても多い
まだ登録しただけなので、実際配信されるメールはわかりませんが、かなり便利なサービス。欲しかった機能ばかりです。運営会社のサイドフィード株式会社は、2005年8月に創業しており代表の赤松洋介氏はサイボウズを経て起業したとのこと。様々なメディアにもとりあげられていますね。ブログ等でよく見るサービスもサイドフィードさんが作成していたんだとわかりました。日本にもいいITサービスがあると実感しました。
せっかくなのでRubyでRSSフィードを取得しDBに登録、定期的にメール配信するプログラムを作ろう考えていたところ、そういったサービスが既に存在する気付きました。(まぁ、、、やっぱりという感じなのですが・・・せっかく作ろうと思っていたのに。。。)
ただこのサービスすごくいいです。RSSがメールで配信されるだけではありません。以下に簡単に機能を紹介します。
サイト名 : MyRSS (http://myrss.jp)
運営会社: サイドフィード株式会社
MyRSSサービス概要
- 新着ニュースをRSSにしてくれるサービス
2)データベースにサイト登録時のテキストリンクを格納しておく(マッチすれば新着ニュースではないと判断)
3)登録できるサイトは10まで、クロールは1-3時間に1回程度(というか充分すぎるでしょう)
- RSS内容をメール配信してくれるサービス
2)配信スケジュールは5つまで登録できる(更新されてない場合は「ない」というメールがとぶ)
3)メールのボリュームは、登録したサイトの更新内容全てなのでとても多い
まだ登録しただけなので、実際配信されるメールはわかりませんが、かなり便利なサービス。欲しかった機能ばかりです。運営会社のサイドフィード株式会社は、2005年8月に創業しており代表の赤松洋介氏はサイボウズを経て起業したとのこと。様々なメディアにもとりあげられていますね。ブログ等でよく見るサービスもサイドフィードさんが作成していたんだとわかりました。日本にもいいITサービスがあると実感しました。
年末でやっとゆっくりできるので、たまっていた本を読みあさることにしました。ただ呼んでも面白みがないため読んだ内容を3から5のポイントに纏めて、ブログで報告していきます。余談ですが、来年の目標に2008年は本を100冊以上読むというのを挙げました。
社長が戦わなければ、会社は変わらない
posted with amazlet on 07.12.31
金川 千尋
東洋経済新報社 (2002/12/06)
売り上げランキング: 135852
東洋経済新報社 (2002/12/06)
売り上げランキング: 135852
おすすめ度の平均: 

カリスマ感じます
稼ぐ社長ランキング4位
株主として著者は、信越化学工業株式会社、米国シンテック両社の代表取締役社長の金川千尋さんです。不況が続く中7年連続最高益を更新したとのことです。経験談から経営で大切な事項が実践的に書かれており、特に感銘を受けた5点を纏めました。
1) 人員は厳選して採用し、さらにチームは少数精鋭を心掛ける
2) 社員をプロフェッショナルに育て上げ、1つの仕事を長く続けてもらう(これが少数精鋭とつながる)
ベンチャー企業になると1人に様々な分野も業務をお願いするが、1つの仕事を長く続けてもらうことで最高のパフォーマンスを発揮してもらう方針だそうです。そのため少数精鋭のチームになるということ。
3) プロジェクトは1:Nチームでステップ毎に構成する
プロジェクト毎にチームを作るというのはよくありますが、ステップ毎に作業内容が変わってきます。そのためプロジェクトに複数チームを用意しステップ毎で構成しているようです。もちろん1プロジェクト通して参加する人もいます。この方が人員(リソース)が最適化されます。
4) ベンチャーはどこにも負けないコスト構造を作ることが大切
これは当たり前のようですが確かに的を得ています。どれだけ低いコストで収益を上げられるかがベンチャーのキーとなります。さらに言えば、コスト安でどこに付加価値をつけるか価値観の変化に敏感でなければなりません。
5) 予測した内容より事態を悪く考え計画を立てる
エンジニアは結構この辺は考えるところではないでしょうか?かならず思っても見なかった問題が発生します。そのためバッファをつくっておくことは大切です。
読んでて感じたのは基本に忠実というか、堅いところは堅い。しかし、柔軟なところはとても柔軟と生産性を挙げるため本質を見失わないための工夫がされているなと感じました。
国際ネットサービスコンテストのオープンウェブアワードで投票による13カテゴリの最終結果が発表されました。投票による結果と審査員の選定結果が発表されています。審査員の結果の方は使ったことのないサービスも結構ありました。実際に使って今後本ブログで報告できればと思います。以下最終結果の内容です。
【投票による結果】

実際の詳細情報はこちらから
Open Web Awards: Final Winners Announced!
【投票による結果】
Mainstream and Large Social Networks

Social News and Social Bookmarking

実際の詳細情報はこちらから
Open Web Awards: Final Winners Announced!
効果の程は、確かはないですがさらにアクセスアップのためにYahoo! Site Explorerにサイトを登録してみました。もっと早く登録したかったのでが、yahoo.comのパスワードを忘れてしまっていたのです。(大分昔に取得したもので・・・)
IDやメールアドレスも思い出せないので、仕方なく新たにYahoo.comのIDを取得しました。覚書としてSite Explorerの登録方法をメモしておきます。
1) はじめにSite Explorerにアクセスする
もし、Yahoo.comのIDがない場合は、Sign Upから新規登録する

(※画像はクリックすると大きくなります。)
2) サイトURLを入力し、「AddMySite」ボタンをクリック
3) 「Manage」をクリックし、「Web Site Feed」を入力して「Add Feed」ボタンをクリック
※Web Site Feed は、atom、RSSでも良いですが、sitemap.xmlでもOKです。(私はsitemap.xmlとatom.xmlの両方と登録しました)
(※画像はクリックすると大きくなります。)
4) Authenticationの設定をする
「Authentication」タブをクリックし、以下2つの方法のいずれかを実行
4.1. 自分のブログのルートディレクトリにダウンロードしたhtmlをアップする
4.2. HTMLのヘッダー部にMETAタグでAuthenticationコードを設定する
レンタルサーバだったこともあり簡単な4.1.を実行。(レンタルサーバでなければ4.2.しかできない場合があります)

(※画像はクリックすると大きくなります。)
⇒「Download File」をクリックしてxxxxxxxxxxxx.htmlをダウンロードする
⇒ブログのルートディレクトリにダウンロードしたhtmlファイルをアップロードする
⇒「Ready to Authenticate」ボタンをクリックする
※承認までは24時間くらいかかるようです。
これでYahooにクロールされるかどうか楽しみです。効果があれば追記します。
2007.12.24 02:50 -->site:www.2mihi.com 7件 (先日までは2件だったような。これはSiteExplorer効果!?)
IDやメールアドレスも思い出せないので、仕方なく新たにYahoo.comのIDを取得しました。覚書としてSite Explorerの登録方法をメモしておきます。
1) はじめにSite Explorerにアクセスする
もし、Yahoo.comのIDがない場合は、Sign Upから新規登録する
(※画像はクリックすると大きくなります。)
2) サイトURLを入力し、「AddMySite」ボタンをクリック
3) 「Manage」をクリックし、「Web Site Feed」を入力して「Add Feed」ボタンをクリック
※Web Site Feed は、atom、RSSでも良いですが、sitemap.xmlでもOKです。(私はsitemap.xmlとatom.xmlの両方と登録しました)
(※画像はクリックすると大きくなります。)
4) Authenticationの設定をする
「Authentication」タブをクリックし、以下2つの方法のいずれかを実行
4.1. 自分のブログのルートディレクトリにダウンロードしたhtmlをアップする
4.2. HTMLのヘッダー部にMETAタグでAuthenticationコードを設定する
レンタルサーバだったこともあり簡単な4.1.を実行。(レンタルサーバでなければ4.2.しかできない場合があります)
(※画像はクリックすると大きくなります。)
⇒「Download File」をクリックしてxxxxxxxxxxxx.htmlをダウンロードする
⇒ブログのルートディレクトリにダウンロードしたhtmlファイルをアップロードする
⇒「Ready to Authenticate」ボタンをクリックする
※承認までは24時間くらいかかるようです。
これでYahooにクロールされるかどうか楽しみです。効果があれば追記します。
2007.12.24 02:50 -->site:www.2mihi.com 7件 (先日までは2件だったような。これはSiteExplorer効果!?)
先日から旅行にいっていたためブログの更新がとどこおっていました。その間(12月21日)にiGoogleのガジェットコンテストの審査結果が発表されたようです。7月から行われたていたコンテストですが、グランプリは「QR Edit」入力したテキストをQRコードへと変換してくれるツールです。良くあるツールですが、確かに結構使用するんですよね。今後のモバイルの発展の希望も含めた受賞でしょう。
以下、授賞式の模様です。
準グランプリは「StartCommand」で、こちらは設定したコマンドを使って、Google以外の検索結果を呼び出すというもの。入力したクエリを設定したサイトで検索できる、いわゆるマッシュアップ系のサイト、Webバージョンもあります。>StartCommand 運営会社はCRE8SYSTEM (クリエイトシステム)という会社みたいですね。
詳細は以下にあります。結構、実用ツールが受賞しましたね。私も作ればよかったなぁと感じています。
以下、授賞式の模様です。
準グランプリは「StartCommand」で、こちらは設定したコマンドを使って、Google以外の検索結果を呼び出すというもの。入力したクエリを設定したサイトで検索できる、いわゆるマッシュアップ系のサイト、Webバージョンもあります。>StartCommand 運営会社はCRE8SYSTEM (クリエイトシステム)という会社みたいですね。
詳細は以下にあります。結構、実用ツールが受賞しましたね。私も作ればよかったなぁと感じています。
先日(2007年12月18日)に楽天がmyRakutenをリニューアルしたようです。大分前から変えるという噂は聞いていましたが、いよいよかといった感じですね。現在はまだbetaバージョン。iGoogleと同様、Ajaxでがちゃがちゃ変更できうようですが、まだコンテンツは限られています。楽天のサービスの多さ&デベロッパー向けにAPIを公開するので?と思われるので今後収益化に進むのではないでしょうか。
また、Railsで作られているというのも面白いですね。楽天がRubyを使うことでRuby自体の商用化も多くなるでしょう。リクルーティング等の効果も良いでしょうね。収益化はどうするのかな。マッチング広告あたりが妥当でしょうか。

楽天のニュースリリースはこちら
⇒ちなみに、Railsを使用して開発工数は以前の3割減となったようです。いよいよRails商用化されてきたなぁ。
他のプログラミング言語であるJavaやPHPを利用した従来の開発プロセスに比べ、工数を約3割削減することができました。
また、Railsで作られているというのも面白いですね。楽天がRubyを使うことでRuby自体の商用化も多くなるでしょう。リクルーティング等の効果も良いでしょうね。収益化はどうするのかな。マッチング広告あたりが妥当でしょうか。
楽天のニュースリリースはこちら
⇒ちなみに、Railsを使用して開発工数は以前の3割減となったようです。いよいよRails商用化されてきたなぁ。
他のプログラミング言語であるJavaやPHPを利用した従来の開発プロセスに比べ、工数を約3割削減することができました。
最近なにかと話題になっているAsiajinですが、読んでみると面白いですね。英語が苦手な私にも読めます。丁度、英語の勉強になり、ITサービスの話なのでビジネスの勉強にもなり一石二鳥ですね。

天才プログラマの新井俊一さんとアルファブロガーの秋元裕樹さんが設立したそうです。日本だけではなく、アジアのWebサービスを英語圏へ発信し、海外のVC等にアピールするとのこと。私も海外に挑戦できる個人サービスをつくりたいです。
↓秋元さんの著書にあるWebサービス(API)の本、マッシュアップのアイディアが浮かぶ本です。
天才プログラマの新井俊一さんとアルファブロガーの秋元裕樹さんが設立したそうです。日本だけではなく、アジアのWebサービスを英語圏へ発信し、海外のVC等にアピールするとのこと。私も海外に挑戦できる個人サービスをつくりたいです。
↓秋元さんの著書にあるWebサービス(API)の本、マッシュアップのアイディアが浮かぶ本です。
何も書くことがないので、個人的にExcelで良く使うゼロパッディングの方法を書きます。結構すぐ忘れてしまうんですよね。
=REPT("0", 10-LEN(A1))&A1
【例】
=REPT("0", 10-LEN(A1))&A1
【例】
- A1セルに「12345」に10桁になるまで0をつける(⇒0000012345)となる
- REPTは第1引数を第2引数分くりかえす
- LENは指定したセルの文字数を取得する
- 10桁にしたい場合、セルの文字列数分引いて「0」を加え、その後にA1の文字列を連結する
以前にPerlでクロールするプログラムを作ったので、勉強がてら今回はRubyで作成してみました。ただ今回はかなり、てこずりました。文字コード?のところではまってしまい作るのにまるまる1日かかりました。まずは出来上がったコード。
【事前準備】
【ソースコード】
ECショップの検索結果から商品情報を取得することを想定しているのですが、どうもカタカナの「ッ」が全て文字化けしてしまう。kconvではなくnkf、iconvを使っても結果はおなじ。解決方法としては以下1行を挿入するだけで文字化けはおきなくなりました。
原因はまだ調べているところですが、以下サイトをきちんと理解できればわかると思います。はぁー、大分はまってしまった。
【参考サイト】
【事前準備】
$ gem install hpricot $ gem install mechanize
【ソースコード】
#!/usr/bin/ruby -Ks
require 'hpricot'
require 'mechanize'
require 'kconv'
require 'jcode'
$KCODE = 's'
# 初期設定
@user_agent = 'Mac Safari'
@wait_time = 5
@url = 'taget_url'
def http_connect(url, keyword)
puts url if $DEBUG
@page = nil;@price = nil;@content = ""
begin
@agent = WWW::Mechanize.new
@agent.user_agent_alias = @user_agent
@page = @agent.get(url)
rescue
puts "#{keyword}#{@drim}CONNECTION ERROR"
return
end
link = @page.links.with.href(%r{http://target_url/\w+?/}).last
puts link.href if $DEBUG
if(link == nil || link.href.empty?)
puts "#{keyword}#{@drim}LINKERROR"
return
end
@page = @agent.click(link)
doc = @page.root
@name = (doc/"span.item_name").inner_html.tosjis
(doc/"span.item").each {|item|
item_str = item.inner_html.tosjis
item_str.scan(/(.*?)<\/div>(.*?)<\/div>/){|title, content|
@content += ":#{title}:#{content}" # if $DEBUG
}
item_str.scan(/([\d+] 円)/){|price|
@price = price
}
puts "#{keyword}#{@drim}#{@price}#{@drim}#{@name}#{@drim}#{@content}#{@drim}#{link.href}"
}
end
def generate_url
puts ARGV[0] if $DEBUG
File.open(ARGV[0]){|f|
f.each{|line|
keyword = line.chomp!
puts keyword if $DEBUG
target="#{@targeturl}?keyword=#{keyword}"
http_connect(target, keyword)
sleep @wait_time
}
}
end
puts @header
generate_url
ECショップの検索結果から商品情報を取得することを想定しているのですが、どうもカタカナの「ッ」が全て文字化けしてしまう。kconvではなくnkf、iconvを使っても結果はおなじ。解決方法としては以下1行を挿入するだけで文字化けはおきなくなりました。
require 'jcode'
原因はまだ調べているところですが、以下サイトをきちんと理解できればわかると思います。はぁー、大分はまってしまった。
【参考サイト】
ちょっとお願いされて、サムネイル画像上にマウスオーバーすると、メイン画像が切り替わるJavaScriptをつくりました。シンプルなソースなのでアップします。JavaScriptよくわからずに作ったので、 あまり上手なつくりでないかもしれません。
<html>
<head>
<title>Photo Change</title>
<script language="javascript" type="text/javascript"><!--
var image="./images/01.jpg";
var title="Sample";
var space=" ";
onload = function(){
resetImage();
}
function viewImage(){
document.getElementById("image").src=image;
document.getElementById("image_title").innerHTML=title;
}
function resetImage(){
document.getElementById("image").src="./images/space.jpg";
document.getElementById("image_title").innerHTML=space;
}
--></script>
</head>
<body>
<div id="wrap">
<div id="main">
<h1>Photo Gallery<h1>
<img id="image" />
<div id="image_title"></div>
<div>
<hr />
<div id="thumbnail">
<img src="images/01.jpg" width="100" onMouseOver="javascript:viewImage(this)"
onMouseOut="resetImage()" />
</div>
</div>
</body>
</html>
Excelはビジネスにかなり使えますが、今日職場で話していたらExcel関数が実はあまり使われていないことが判明。ってことでExcel関数からSUBTOTALを紹介します。
SUBTOTAL
【使い方】
セルの範囲をオートフィルタした場合、表示されている行にのみ関数を適用する
【使用例】
SUBTOTAL(9, A1:A50)
SUM(A1:A50)
フィルタをかけると動的に値が変化するのでいちいちSUMを入力する手間がはぶけます。
今回はこんな感じで。次回は別の関数か、ピボットテーブルを紹介する予定。
↓Excelを普通に使いこなしている人に最適。
普通じゃわからない。Excelでの様々なソリューションがのっています。
SUBTOTAL
【使い方】
セルの範囲をオートフィルタした場合、表示されている行にのみ関数を適用する
【使用例】
SUBTOTAL(9, A1:A50)
- 第1引数:実行する関数(1=AVERAGE, 2=COUNT, 3=COUNTA, 4=MAX, 5=MIN, 6=PRODUCT, 7=STDEV, 8=STDEVP, 9=SUM, 10=VAR, 11=VARP)
- 第2引数:対象のセル範囲
SUM(A1:A50)
フィルタをかけると動的に値が変化するのでいちいちSUMを入力する手間がはぶけます。
今回はこんな感じで。次回は別の関数か、ピボットテーブルを紹介する予定。
↓Excelを普通に使いこなしている人に最適。
普通じゃわからない。Excelでの様々なソリューションがのっています。
せっかくブログをつくっても、誰にも見られてないと更新するモチベーションがあがりません。ということでアクセスアップのため、AddClips(ソーシャルブックマークボタン統合サービス)とPing一括配信サービス Pingoo!に登録しました
AddClips

AddClipsは様々なソーシャルブックマークに追加するボタンをつけてくれるサービス。特に会員登録しなくても利用できます。会員登録するとマイページで各ソーシャルブックマークごとにどれだけ登録されているかを確認することができます。閲覧者がソーシャルブックマークに登録してくれることで被リンクを増やしSEO効果があがるわけです。
Pingoo!

Pingooは、Ping送信を一括でおこなってくれるサービスです。これ便利ですよね。ブログサイトよってはping送信サイト数が限られていたりするし、そうでなくても新たにいろいろping送信先を追加、変更するのは面倒なので一括で管理したいというわけです。送信のOK/NGのステータスも確認することができます。Bユーザは有料ですが月々たいした金額ではないのでやる価値は十分あります。Ping送信代行サービス。自分でもできるが手間がかかるものを代行としてサービスするという考え方はありですね。こちらも被リンクが増えるためSEOに効果があります。またリンクからアクセス向上も望めます。はたしてこれでアクセス数がどれだけ増えるか。検証結果はのちほど報告します。
テクノラティプロフィール
AddClips
AddClipsは様々なソーシャルブックマークに追加するボタンをつけてくれるサービス。特に会員登録しなくても利用できます。会員登録するとマイページで各ソーシャルブックマークごとにどれだけ登録されているかを確認することができます。閲覧者がソーシャルブックマークに登録してくれることで被リンクを増やしSEO効果があがるわけです。
Pingoo!
Pingooは、Ping送信を一括でおこなってくれるサービスです。これ便利ですよね。ブログサイトよってはping送信サイト数が限られていたりするし、そうでなくても新たにいろいろping送信先を追加、変更するのは面倒なので一括で管理したいというわけです。送信のOK/NGのステータスも確認することができます。Bユーザは有料ですが月々たいした金額ではないのでやる価値は十分あります。Ping送信代行サービス。自分でもできるが手間がかかるものを代行としてサービスするという考え方はありですね。こちらも被リンクが増えるためSEOに効果があります。またリンクからアクセス向上も望めます。はたしてこれでアクセス数がどれだけ増えるか。検証結果はのちほど報告します。
結構騒がれている英語学習のSNS、「iKnow!」。
1週間前くらいに登録だけしていたのですが、使ってみると「これが無料なの?」と驚かされます。

まだ、ちょっと使っただけですが、学習向けのアプリケーションがしかっりしており、また、SNSであるため、1人でやるより続けなきゃという気持ちになる。一緒に勉強するという目的があるため、SNSは、目的がはっきりしていないとはやらないと言うが学習はかなり相性がいいように思いました。また、ゲーム間隔で楽しく学習できるところがDS系ゲームにも共通するところでますますはやりそうですね。
セレゴ・ジャパン株式会社さんが運営しているみたいで、「The best things in life are free. (世の中で最も価値あるものは無償だ)」ということで基本サービスは、これからもずっと無料だそうです。
活動資金は将来的に広告、プレミアサービスを検討しているようです。
こういうサービスが無料なのは本当に感謝です。私もあまり英語が得意ではないので是非勉強したいと思います。
1週間前くらいに登録だけしていたのですが、使ってみると「これが無料なの?」と驚かされます。
まだ、ちょっと使っただけですが、学習向けのアプリケーションがしかっりしており、また、SNSであるため、1人でやるより続けなきゃという気持ちになる。一緒に勉強するという目的があるため、SNSは、目的がはっきりしていないとはやらないと言うが学習はかなり相性がいいように思いました。また、ゲーム間隔で楽しく学習できるところがDS系ゲームにも共通するところでますますはやりそうですね。
セレゴ・ジャパン株式会社さんが運営しているみたいで、「The best things in life are free. (世の中で最も価値あるものは無償だ)」ということで基本サービスは、これからもずっと無料だそうです。
活動資金は将来的に広告、プレミアサービスを検討しているようです。
こういうサービスが無料なのは本当に感謝です。私もあまり英語が得意ではないので是非勉強したいと思います。
2年くらい前に購入した、楽天でフランクリン・プランナーの手帳を買いました。
でも、最近はめっきり使っていないです。来年分は買おうかどうか悩んでいたのですが、結局買っちゃいました。
しかも、別のセット一式買っちゃいました。
フランクリンプランナーは、バインダーとリフィル(替えの用紙)があり、基本はリフィルを交換すればよいというわけです。これまで使った経験上の長所・短所を纏めました。
フランクリンプランナーの良い点
メモ帳を別で必要としているのが、そもそも無駄なため、クラシックという今使っているより大きいA5サイズを購入しました。(これまではコンパクトというサイズです)
# より重くなっていまうのですが・・・
TODOリストはWebとかで管理するとして、スケジュール管理と打ち合わせのメモは手帳につけたいので購入することを決意しました。
これで駄目なら再来年は買うのをやめよう
でも、最近はめっきり使っていないです。来年分は買おうかどうか悩んでいたのですが、結局買っちゃいました。
しかも、別のセット一式買っちゃいました。
フランクリンプランナーは、バインダーとリフィル(替えの用紙)があり、基本はリフィルを交換すればよいというわけです。これまで使った経験上の長所・短所を纏めました。
- 目標管理ができる
- 月別、日別でスケジュールを管理できる
- メモが纏めやすい(決められたフォーマットがあるため)
- 重くて持ち運びずらい
- 日毎にメモできるようになっているため、TODO管理として使用していると、過去のリストが見えずらい
- 書き込める欄が少ないため、別のメモ帳が必要となってしまう
メモ帳を別で必要としているのが、そもそも無駄なため、クラシックという今使っているより大きいA5サイズを購入しました。(これまではコンパクトというサイズです)
# より重くなっていまうのですが・・・
TODOリストはWebとかで管理するとして、スケジュール管理と打ち合わせのメモは手帳につけたいので購入することを決意しました。
これで駄目なら再来年は買うのをやめよう
Amazonアフィリエイト・プログラム
(アフィリエイト)にアカウント登録しました。
かなり昔に1回登録していたのですが、やり方忘れたのでやり直しました。
本当に簡単にできるんですね。
このページではAmazonおまかせリンク(R) ベータ版というのを使っています。
GoogleのAdsenseのように、サイトの内容で自動的に選択したカテゴリの商品が表示されるようです。
はじめは全然違う商品が表示されていましたが、今は大分コンテンツに合った本が表示されているように思えます。
かなり昔に1回登録していたのですが、やり方忘れたのでやり直しました。
本当に簡単にできるんですね。
このページではAmazonおまかせリンク(R) ベータ版というのを使っています。
GoogleのAdsenseのように、サイトの内容で自動的に選択したカテゴリの商品が表示されるようです。
はじめは全然違う商品が表示されていましたが、今は大分コンテンツに合った本が表示されているように思えます。
しばらく、Rubyをやっていたので忘れないようにPerlでクロールスクリプトを書いてみます。
PerlもWebアプリ開発はやったことがないですが、、、仕事でパッチワーク的なツールをつくるのによく使っています。
環境はWindows&ActivePerl()で実施しました。
指定したURLにアクセスし、検索結果から価格等の情報を抜き取る
input.txtに検索ワードを読み込み、LWP::UserAgent->getで検索結果からコンテンツを抜き出し、欲しい情報をCSVファイルに保存する
まぁ、こんな感じでしょうか?
とりあえず、Rubyでも同様のプログラム作ってみたいな。
※Rubyでもクローラー作成しました。詳細はこちら
PerlもWebアプリ開発はやったことがないですが、、、仕事でパッチワーク的なツールをつくるのによく使っています。
環境はWindows&ActivePerl()で実施しました。
指定したURLにアクセスし、検索結果から価格等の情報を抜き取る
input.txtに検索ワードを読み込み、LWP::UserAgent->getで検索結果からコンテンツを抜き出し、欲しい情報をCSVファイルに保存する
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use URI;
use Encode;
use encoding 'shiftjis';
binmode(STDERR, ':raw :encoding(shiftjis)');
use Text::CSV_XS;
####################
### 初期設定 ###
####################
my $inputfile = "input.txt";
my ($day,$month,$year) = (localtime)[3..5];
my $outputfile = 1900 + $year . $month+1 . $day . ".csv";
my $baseUrl = 'http://target_domain/';
my @cvs_header = qw(no name price url);
my $user_agent = ’user_agent';
sub input_data{
open(IN, $inputfile) || die "Can't open $inputfile :$!";
my @data = ;
my $num = @data;
print "取得データ件数:$num\n";
close(IN) || die "Can't close $inputfile :$!";
return \@data;
}
sub url_encode($) {
my $str = shift;
$str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$str =~ tr/ /+/;
return $str;
}
sub http_connect {
my $data = shift;
my @output;
push @output, \@cvs_header;
my @headers = ('User-Agent' => $user_agent);
my $url = URI->new($baseUrl);
my $browse = LWP::UserAgent->new;
foreach (@$data) {
chomp;
$url->query_form(
sitem => $_
);
my $response = $browse->get($url, @headers);
my $content=decode('euc-jp',$response->content);
print "#";
my ($rec) = $content =~ m#\n(.*?)\n#mis;
my ($link, $name) = $rec =~ m#([^<]*?)#;
my ($price) = $rec =~ m# (.+?円)#mis;
push @output, [($_,$name,$price,$link)];
sleep 3;
}
return \@output;
}
sub output_CSV {
my $output = shift;
my $csv = Text::CSV_XS->new({'binary' => 1});
open(OUT, ">:encoding(shiftjis)", "$outputfile") || die "Can't open outputfile!:$!";
foreach(@$output){
$csv->combine(@$_);
print OUT decode('utf8', $csv->string);
print OUT "\n";
}
close(OUT) || die "Can't close outputfile!:$!";
}
my $data = input_data;
my $output = http_connect($data);
output_CSV($output);
まぁ、こんな感じでしょうか?
とりあえず、Rubyでも同様のプログラム作ってみたいな。
※Rubyでもクローラー作成しました。詳細はこちら
RubyでHTTPアクセスが正常にできるかどうかを確認するツールを作成しました。
対象のURLにアクセスし、titleの文字列で正常にページアクセスできるかどうか確認しています。
エラー時は指定したメールアドレスにメールをとばすようになっています。
以下にソースコードを記載します。
※下線部は適宜環境にあわせてください
Windows環境でおこないました。
デバッグモードで実行するといくつか警告がでてますね。なんでだろ?
とりあえず動作はします。
【事前準備】
gemsでmechanizeをインストールする
> gem install mechanize
【ソースコード】
【参考にしたサイトです】
対象のURLにアクセスし、titleの文字列で正常にページアクセスできるかどうか確認しています。
エラー時は指定したメールアドレスにメールをとばすようになっています。
以下にソースコードを記載します。
※下線部は適宜環境にあわせてください
Windows環境でおこないました。
デバッグモードで実行するといくつか警告がでてますね。なんでだろ?
とりあえず動作はします。
【事前準備】
gemsでmechanizeをインストールする
> gem install mechanize
【ソースコード】
#!/usr/bin/ruby
require 'mechanize'
require 'net/smtp'
require 'kconv'
url = "http://localhost/"
wait_time = 15
@from_address = "from@mail_domain"
@send_address = "send@mail_domain"
agent = WWW::Mechanize.new
def send_alert( msg )
body = [ "Subject: HTTP Access Error\n", "\n", msg ]
Net::SMTP.start('mail_server') do |smtp|
smtp.sendmail( body, @from_address, @send_address )
end
exit
end
begin
while 1
page = agent.get(url)
s = page.title.tosjis
if s =~ /match_word/
puts "#{url}: #{s}\n" if $DEBUG
else
puts "#{url}: #{s}=#{match_str.tosjis}\n" if $DEBUG
send_alert("#{url}: #{s}\n")
end
sleep wait_time
end
rescue => ex
puts "#{url}: #{ex.message}\n" if $DEBUG
send_alert("#{url}:#{ex.message}\n")
end
【参考にしたサイトです】
Railsを使えば、あまりRubyの知識がなくてもWebアプリが作れます。
それはそれで、すごいことですが、やっぱりRubyも覚えてたい!という気持ちもあります。
というわけで、Rubyのメソッドについてちょっと試しました。
変数の値を返すだけであれば1行メソッドの方が良いかもしれません。
それはそれで、すごいことですが、やっぱりRubyも覚えてたい!という気持ちもあります。
というわけで、Rubyのメソッドについてちょっと試しました。
=begin
「Hello,Ruby」取得メソッド
1) 普通にメソッドを作成し呼び出す
=end
def hello_world()
hello = "Hello, Ruby."
return hello
end
puts hello_world() #=> Hello, Ruby.
=begin
2) 省略形
* Rubyではreturnを省略すると最後の式の値が返る
* メソッドの括弧は省略できる
* 改行が処理の区切りだが、「;」で区切ることも可能
※上記をふまえ以下のように変更
=end
def hello_world; hello="Hello, Ruby.";end
puts hello_world #=> Hello, Ruby.
変数の値を返すだけであれば1行メソッドの方が良いかもしれません。
MySQLでtimestamp型を使ってテーブルを作成したのですが、勝手に時間が入力されて困っていました。以下テーブル定義例(ブログテーブルをイメージ)
plan_atのところですが、ここは公開予定日にしたいな、と考えていました。default nullにして指定したときだけ時間を設定しようとしたのですが、調べてみるとどうやら無理みたい。結局はtimestamp型をdatetime型に変更し、default null設定したら思ったような動作になりました。これって基本なの?知らなかった。。。
create table posts (
id int unsigned auto_increment,
user_id int unsigned not null,
subject varchar(128) not null,
content text,
status enum('close', 'open') default 'close',
created_at timestamp,
updated_at timestamp,
plan_at timestamp,
primary key (id),
index user_id_idx (user_id),
index status_idx (status)
);
plan_atのところですが、ここは公開予定日にしたいな、と考えていました。default nullにして指定したときだけ時間を設定しようとしたのですが、調べてみるとどうやら無理みたい。結局はtimestamp型をdatetime型に変更し、default null設定したら思ったような動作になりました。これって基本なの?知らなかった。。。





