Home > 株式投資

株式投資 Archive

ニュース自動収集スクリプト2

#------------------------------------------------------------------------------------------
# いらないdatを消去
#------------------------------------------------------------------------------------------
def deleteDat(datArray)
	# カレントディレクトリのdatファイルリスト
	fileList = Dir::entries(Dir::pwd)
	fileList.delete_if{|x| /\.dat$/ !~ x }

	# カレントディレクトリの.datファイルでdatArrayにないものを消す
	fileList.each{|name|
		flag = true #デフォルトでは消す
		datArray.each{|datname|
			if name == datname then
				flag = false #消さないことにする
			end
		}
		if flag == true then
			File.delete(name)
			puts "deleted : " + name
		end
	}
end

#------------------------------------------------------------------------------------------
# 目ぼしいスレッドか判定
#------------------------------------------------------------------------------------------
def judge(title)
	STOCK_CODE.each{|code|
		if title.include?(code.to_s) then
			return true
		end
	}
	return false
end

#------------------------------------------------------------------------------------------
# Reuters
#------------------------------------------------------------------------------------------

def Reuters(url)
	body = HTTPGet(url).body.gsub("\n", "")

	if /<title>(.*?)< \/title>/ =~ body then
		title = $1
	else
		return
	end

	title.gsub!("\n","")
	title.strip!

	$content += "#{title}\r"
end

def post
	puts "postします"

	today = Time.now
	dateCreated = XMLRPC::DateTime.new(today.year, today.month,today.day, today.hour, today.min,today.sec )

	s = {
		'page_status'=>"post",
		'title'=>today.to_s,
		'description'=>$content,
        'dateCreated'=>dateCreated,
        'categories'=>"未分類"
	}
	puts $content
	puts s

#	blog = XMLRPC::Client.new2("http://あどれす/xmlrpc.php")
	blog = XMLRPC::Client.new("あどれす", "/xmlrpc.php", 80, "localhost", 8080 )
#	blog = XMLRPC::Client.new("あどれす", "/xmlrpc.php", 80)
	result = blog.call("metaWeblog.newPost", "1", あいでぃ, ぱすわーど, s, "1" )

end

#------------------------------------------------------------------------------------------
# メイン
#------------------------------------------------------------------------------------------
def main
	$KCODE = "SJIS"

	history = NewsHistory.new
	$content = ""

	# subject.txtの取得
	res = HTTPGet(BOARD)

	# 読むべきdatリスト
	datArray = []

	# 1行ずつ判定
	res.body.each{|line|
		d = line.split( /<>/ )
			if judge(d[1]) == true then
				datArray < < d[0]
				puts d[0]
				puts Kconv.toutf8(line)
			end
	}
	datArray.uniq!

	# いらないdatファイルを消去
	deleteDat(datArray)

	# かき集める
	datArray.each{|name|
		crawl( name )
	}

	#重複を削除
	NEWS_URL.uniq!

	# 過去の履歴を見て、ないようなら読みに行く
	NEWS_URL.each{|line|
		if history.add(line) == true then
#			puts Kconv.toutf8( line + "は未読なので読みに行きます" )
			Reuters(line)
		end
	}

	# 投稿する
	if $content.size > 10 then
		puts "Write:index.html"
		f = open("index.html", "w")
		f.puts $content
		f.close
	end

	history.update

end

# mainを呼び出すだけ
main

ニュース自動収集スクリプト

ソースコード

require 'net/http'
require 'net/smtp'
require 'net/pop'
require 'kconv'
require 'xmlrpc/client'

BOARD = "http://mamono.2ch.net/livemarket1/subject.txt"

STOCK_CODE = [
7974,
7201,
7203,
7267,
8058,
8031,
9984,
9022,
9202,
9205,
7731,
9433,
3436,
5411,
6758,
8411,
8316,
8306,
]

NEWS_SITE =
[
"http://jp.reuters.com/article",
]

#かき集めたニュースURLが入る配列
NEWS_URL = []

# 過去に扱ったニュース

class NewsHistory

	# 初期化
	def initialize
		#配列の初期化
		@NewsList = []

		f = open("NewsHistory.txt")
		f.each{|line|
			@NewsList < < line
		}
		f.close
	end

	# 重複が起こらないように追加
	def add(url)
		if @NewsList.index(url) == nil then
			@NewsList << url
			return true
		else
			return false
		end

		return false
	end

	# 重複をチェック
	def check
		@NewsList.uniq!
	end

	# 更新
	def update
		f = open( "NewsHistory.txt", "w" )
		@NewsList.each{|line|
			f.puts line
		}
		f.close
	end

end

#------------------------------------------------------------------------------------------
# HTTPGet
#------------------------------------------------------------------------------------------

def HTTPGet(url)

	if /http:\/\/(.*?)\/(.*)/ =~ url then
		host = $1
		path = "/" + $2

#		puts host
#		puts path

		req = Net::HTTP::Get.new(path)
		req["Host"] = host
		req["User-Agent"] = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-JP-mac; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
		req["Accept"] = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
		req["Accept-Language"] = "en-us;q=0.7,en;q=0.3"
		req["Accept-Charset"] = "Shift_JIS,utf-8;q=0.7,*;q=0.7"
		req["Keep-Alive"] = "300"
		req["Referer"] = "300"
		req["Connection"] = "keep-alive"
		res = Net::HTTP.start(host, 80) {|http|
			http.request(req)
		}

		return res
	end

	return nil
end

#------------------------------------------------------------------------------------------
# URLをテストする
#------------------------------------------------------------------------------------------
def checkSite( address )
	url = URI.parse(address)
	res = Net::HTTP.start(url.host, url.port){|http|
		http.head(url.path)
	}

	# HTTP_OKなら
	if res.code == 200 then

	end

end

#------------------------------------------------------------------------------------------
# 取得したbodyを分析
#------------------------------------------------------------------------------------------
def analyze( body )
	body.each{|line|
		flag = false #デフォルトはヒットしていない
		NEWS_SITE.each{|url|
			if line.include?( url ) then
#				puts Kconv.toutf8("debug : hit : " + line)
				flag = true # ヒットフラグを立てる
			end
		}

		# 該当URLっぽいのがあった場合
		if flag == true then
			if /(http\:\/\/[\w\+\$\;\?\.\%\,\!\#\~\*\/\:\@\&\\\=\_\-]+)/ =~ line then
				NEWS_URL << $1
			end
		end
	}

end

#------------------------------------------------------------------------------------------
# datを取得:name = datファイル名
#------------------------------------------------------------------------------------------
def crawl( name )
	board = "http://mamono.2ch.net/livemarket1/dat/"
	address = board + name

	puts "Getting " + address

    header = {}
    header['User-Agent']= 'Monazilla/1.00 (super-hikky/1.0)'

    length = 0

    if File.exist?( name )
        length = File.stat( name ).size
        datfile = open( name, 'a' )
    else
        datfile = open(  name, 'w' )
    end

    if length > 0
        header['Range'] = "bytes=#{length-1}-"
    end

    url = URI.parse(address)
    res = Net::HTTP.start(url.host, url.port){|http|
        http.get(url.path,header)
    }

	#中身があるときのみ書き出し
	if /^\n/ !~ res.body then
	    datfile.print res.body
#   		puts Kconv.toutf8(res.body)
   		analyze(res.body)
	end

    datfile.close
end

世界経済に何が起こっているのか

何か急激な動きがあると個人の情報収集力ではどうしようもないことが普通である。その一つの対策として2chの情報は使えると思う。誰かが情報を見つけてニュースソースを貼り付けてくれる。それを自動的に収集するスクリプトを作ってみた。

ニュース

  1. 自動車各社に業績未達リスク、米国発の金融不安が直撃| Reuters
  2. 株式こうみる:米株底入れは2020年の可能性も=三井住友銀 宇野氏| マネーニュース| Reuters
  3. ブッシュ米大統領、英・仏・伊首脳と市場安定化について協議=ホワイトハウス| マネーニュース| 最新経済ニュース | Reuters
  4. バーナンキ米FRB議長、利下げの用意を示唆| マネーニュース| 最新経済ニュース | Reuters
  5. 英財務相、公的資金注入を含む銀行救済策を8日に発表=政府筋| Reuters
  6. 〔焦点〕日経平均が一時1万円割れ、金融問題の収束見えず楽観論は後退| マネーニュース| 株式市場| Reuters
  7. UPDATE1: 米国株式市場=大幅続落、深刻な景気後退懸念が高まる| マネーニュース| 最新経済ニュース | Reuters
  8. UPDATE1: 先行き不安出てくる、対策をしないといけない=株下落で麻生首相| マネーニュース| 最新経済ニュース | Reuters
  9. Mスタンレーへの出資は予定通り、当局の認可待ち=三菱UFJ| Reuters
  10. UPDATE2: 米下院、金融安定化法案を228対205で否決| マネーニュース| 最新経済ニュース | Reuters
  11. UPDATE1: 三井住友銀、英バークレイズと海外で個別案件ごとに提携強化=常務| マネーニュース| 最新経済ニュース | Reuters
  12. UPDATE1: 三井住友銀、英バークレイズと海外で個別案件ごとに提携強化=常務| Reuters
  13. UPDATE3: 三菱UFJ<8306.T>がMスタンレーに90億ドル出資で筆頭株主に、企業金融や投資銀行業務での提携を検討| マネーニュース| 最新経済ニュース | Reuters
  14. 〔情報BOX〕米金融安定化法案をめぐり今後予想されるシナリオ| マネーニュース| 最新経済ニュース | Reuters
  15. 9月の米非農業部門雇用者数は‐15.9万人、失業率6.1%=労働省| マネーニュース| 最新経済ニュース | Reuters
  16. 海外勢が株・債券売りで現金化、市場の混乱長期化を懸念| Reuters
  17. トヨ車<7221.T>:09年3月期連結決算予想、当期利益136億円、修正せず| マネーニュース| 最新経済ニュース | Reuters
  18. 〔株式スコープ〕換金売りで沈む輸出型主力株、相場回復期は内需株に主役交代も| マネーニュース| 株式市場| Reuters
  19. MT: Summary for ARCELOR MITTAL NEW – Yahoo! Finance
  20. ソフトバンクが14カ月連続で純増数トップ、6月携帯契約数| Reuters
  21. KDDI<9433.T>の7月MNPは1200件の転出超、導入後初| マネーニュース| 最新経済ニュース | Reuters
  22. KDDIの7月携帯電話契約MNPは導入後初の転出超| テクノロジーニュース| Reuters
  23. 英金融機関の株価急落、資金支援で英政府と協議との報道| Reuters
  24. リーマンの無担保債権を保有する主要金融機関| ビジネスニュース| Reuters
  25. あおぞら銀<8304.T>の保有債権額4.63億ドル、みずほCBは同3.82億ドル=リーマン| Reuters
  26. UPDATE2: 金融不安で世界同時不況の瀬戸際に、個人・企業への減税など追加対策の検討を=日本経団連会長| マネーニュース| 最新経済ニュース | Reuters

Home > 株式投資

Search
Feeds
Meta

Page Top