# -*- coding: utf-8 -*- #!/usr/bin/env python def main(): pass if __name__ == '__main__': main() import os import codecs import sys import datetime #import urllib.request import urllib import urllib2 import cookielib #from collections import namedtuple import unicodedata import copy #定数####################################################### foruda = "C:/pythontest/" blockURL = "sinseihikikomori.bblog.jp" sakuraURL = "sinseihikikomori.sblo.jp" exciteURL = "sinseihiki.exblog.jp" comURL = "sinseihikikomori.blogspot.com" jpURL = "sinseihikikomori.blogspot.jp" nowURL = "www.sinseihikikomori.com" #ここでいっか。 blocklist = [ ["blocktitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] sakuralist = [ ["sakuratitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] excitelist = [ ["excitetitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] comlist = [ ["comlisttitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] jplist = [ ["jptitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] nowlist = [ ["nowtitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] #完成したリスト。 finlist = [ ["fintitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] finsortlist = [ ["finsorttitle", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] # m ################### l # # a ### main ########## o # # i ######### loop #### o # # n ################### p # #メインループmainloop #動けばいいので一切気にしてはいけない。 #立ち止まったら死ぬものとおもえ。 def mainloop(): #URL渡してはてブからDLしてリストに格納。 #ダウンロード成功したらコメントアウト。 #urlsave() #DL後したのでリストを制作。 #リストのセーブロードが出来るならコメントアウト。 makelist() #セーブする。 # savelist() #ロードする。 # loadlist() #マージする。(失敗分はマージせずskip) maaji() #これ要らない。要る。要するにfinlist作成なので必須。 #ソートする。 #global finsortlist #global finlist #finsortlist = sortbukumasuu(finlist) sortbukumasuu(finlist) #finsortlist完成したのでテキストファイルにテストしてみる。 #putouttest(finsortlist, "finsorttest___tanomu") putouthtml() #test #finlist = blocklist+ sakuralist + excitelist + comlist + jplist + nowlist #putouttest(finlist, "fin") def urlsave(): URLallSAVE(sakuraURL) URLallSAVE(blockURL) URLallSAVE(exciteURL) URLallSAVE(comURL) URLallSAVE(jpURL) URLallSAVE(nowURL) def makelist(): #????deepcopy?? #sakurablog rocalHTMLtoLIST("sakura") #blcokblog rocalHTMLtoLIST("block") #exciteblog rocalHTMLtoLIST("excite") #com rocalHTMLtoLIST("spotcom") #jp rocalHTMLtoLIST("spotjp") #now rocalHTMLtoLIST("now") #誤爆チェック。他エントリURLを誤爆で取得してしまっているのを探す。 #findgobaku() #ugokanai def findgobaku(): global finlist #重複を探し、重複ならはてブ数を足して重ねる。 #ただし、[1]にsippaiと書かれたものは重ねない。 #初出なら単純追加。 iaa = 0 while iaa <= range(len(finlist) - 3): if iaa >= range(len(finlist)): break if finlist[iaa][1].find("sippai") == -1: #sippaiの文字が見つからなかったので重複を探して回る。 ibb = iaa + 1 while ibb <= range(len(finlist) - 3): if ibb>= range(len(finlist)): break #重複チェック。[3]のtrueurlで。 if finlist[iaa][3] == finlist[ibb][3]: #はてブ数[4]を足す。 finlist[iaa][4] += finlist[ibb][4] #後者を削除する。 del finlist[ibb] #削除したならインデックスも減らす。 iaa -= 1 ibb -= 1 ibb +=1 iaa +=1 def savelist(): savesitaistr = "" for ii in range(len(finlist)): for iueo in 6: savelist += finlist[ii][iueo] + "\t" savelist += "\n" fairuname = "savesaretalist" #ファイルに出力 f = codecs.open("C:/pythontest/" + fairuname + ".txt", "w") f.write(savesitaistr) f.close() def loadlist(): fairuname = "savesaretalist" for line in open("C:/pythontest/" + fairuname + ".txt", "r"): itemlist = line[:-1].split("\t") # f.close #print itemlist #レコード型####################################################### #0、はてブから取得したタイトル #1、正確なタイトル(現URLのタイトル) #2、はてブから取得したURL #3、現在のURL #4、はてブ数 #5、日時(現アドレスから取得) #ブログのエントリーのタイトルを取得する。 #【class="entry-link" title="】はてブでは、ここにタイトル【"】 def gettitle(hatebuxml, entnum): iti = hatebuxml.find('class="entry-link" title="') for i in range(entnum): iti = hatebuxml.find('class="entry-link" title="', iti+30) tempxml = hatebuxml[iti+26:iti+400] itiend = tempxml.find('"') return (tempxml[0:itiend]) #はてブに表示されているURL(404) #【】ここに半角数字であります【 user】 def gethatebunum(hatebuxml, entnum): iti = hatebuxml.find('ブックマーク)">') #全角文字の扱いが不安なので半角文字のインデックス取り出し。 iti = hatebuxml.find('">', iti) for i in range(entnum): iti = hatebuxml.find('ブックマーク)">', iti+30) iti = hatebuxml.find('">', iti) tempxml = hatebuxml[iti+2:iti+30] itiend = tempxml.find(' user') return (tempxml[0:itiend]) #正確な現アドレス取得失敗時の為に、前もってはてブで日時取得。 #正確な現アドレスの取得に成功したならば、上書きすればいい。 def gethatebunitiji(hatebuxml, entnum): iti = hatebuxml.find('
  • ') for i in range(entnum): iti = hatebuxml.find('
  • ') nen = hatebuxml[iti+22:iti+26] tuki = hatebuxml[iti+27:iti+29] hi = hatebuxml[iti+30:iti+32] tekitounitiji = datetime.date(int(nen), int(tuki),int(hi)) return(tekitounitiji) #現在のブログアドレスでのURLを取得する。 #はてブのタイトルをgoogleに投げて取得。 #失敗分は修正するればいいので適当にやる。 #【
      1. ', iti) #true url ゲットーーーーーぉおおお。 trueurlkitaaaaaaaaa = dlx[iti+22:itiend] #true urlを微修正。 fixtrueurl = trueurlkitaaaaaaaaa.replace('sinseihikikomori.blogspot.com', 'www.sinseihikikomori.com') print(fixtrueurl) return(fixtrueurl) #正確なタイトル取得。(はてブのタイトルは「真性引き篭もり/entry」等、不正確) def gettruetitle(trueurl): tempdl = urllib.urlretrieve(trueurl, "tempentry.html") #二度手間だけど動くからどうでもいい。 strtemp = open(foruda + "tempentry.html", "r").read() #明らかに二度手間だけど気にしない。 iti = strtemp.find('') itiend = strtemp.find('</', iti) #ブログ名を削除し、エントリータイトルのみに。 fixtitle = strtemp[iti+7:itiend].replace(' - 真性引き篭もり', '') #excite blog分は移転時に失敗したので修正。 fixtitle = fixtitle.replace('excite blogで書いていた分', '') return(fixtitle) #trueURLでは、<abbr class="published" title="2012-05-19T06:14:00+09:00">6:14</abbr> #ぶれがある。注意。シングルクオーテーションのものが存在する。 def getnitiji(trueurl): #またダウンロード。二度手間ならぬ三度手間。気にするな。てきとうでいい。コピペコピペ tempdl = urllib.urlretrieve(trueurl, "tempentry.html") #二度手間だけど動くからどうでもいい。 strtemp = open(foruda + "tempentry.html", "r").read() #明らかに二度手間だけど気にしない。 iti = strtemp.find('published') iti = strtemp.find('title=', iti) nen = strtemp[iti+7:iti+11] tuki = strtemp[iti+12:iti+14] hi = strtemp[iti+15:iti+17] try: inen = int(nen) except ValueError: inen = 1000 try: ituki = int(tuki) except ValueError: ituki = 11 try: ihi = int(hi) except ValueError: ihi = 11 truenitiji = datetime.date(inen, ituki, ihi) return(truenitiji) #レコード型####################################################### #0、はてブから取得したタイトル #1、正確なタイトル(現URLのタイトル) #2、はてブから取得したURL #3、現在のURL #4、はてブ数 #5、日時(現アドレスから取得) def xml2record(hatebuxml, entrylist): #1xmlに20エントリー有るかどうか確かめる。 #【class="entry-link" title="】の数を数える。 ient = hatebuxml.count('class="entry-link" title="') #entrylistに格納してゆく。 #(最終のhtmlは20エントリー未満なので不安要素だが気にするな。) for entnum in range(ient): #0、はてブから取得したタイトル tt = gettitle(hatebuxml, entnum) #2、はてブから取得したURL #ur = geturl(hatebuxml) ur = geturl(hatebuxml, entnum) #4、はてブ数 #hn = gethatebunum(hatebuxml) hn = gethatebunum(hatebuxml, entnum) #5、不正確な日付(はてブから取得)をとりあえず取得。 trtm = gethatebunitiji(hatebuxml, entnum) #site:sinseihikikomori.com urlをgoogleに投げ、 #hitした一番上のページを確保。そこからULRや日時を取得。 #3、現在のURL trur = gettrueURL(tt) #www.sinseihikikomori.comならゲット。 #違うURLを持ってきてしまっているなら、 #手動修正の足がかりとする為にタイトルに記述。 #正しいURLを取得できたか? if 0 < (trur.find("p://www.sinseihikikomori.com")): #月別アーカイブを取得してしまっていないか? if -1 == (trur.find("_archive.html")): #1、正確なタイトル(現URLのタイトル) trtt = gettruetitle(trur) #5、正確な日付(現アドレスから取得)で上書き。 trtm = getnitiji(trur) else: trtt = tt + "(sippaimonth。月別アーカイブを取得してしまった)" #時系列は諦める。ダミー入れておく。 trtm = datetime.date(1905,5,27) else: trtt = tt + "(sippaiurl。URLの取得に失敗した)" trtm = datetime.date(1600,10,21) entrylist.append([tt, trtt, ur, trur, hn, trtm]) #追加してリストを返す。 #gdgdだが気にするな。 #どーでもいい。 #うごきゃよかばい。 #がんばれ。 #こころ折れんな。 return(entrylist) #ローカルにダウンロードしたHTMLから、 #タイトル、現URL、はてブ数、datetime(date)を取得して #レコード型でリストへ収納(追加)する。 def rocalHTMLtoLIST(fairuname): #sakuralist := tlist; entrylist = [ ["title", "truetitle", "url", "trueurl", 0, datetime.date(2000,5,25)] ] #DLしたはてブxmlを解析。 #for pagenum in range(40): #for pagenum in range(20): #for pagenum in range(38): for pagenum in range(39): fullpasu = foruda + fairuname + str(pagenum) + ".html" hatebuxml = open(fullpasu, "r").read() entrylist = xml2record(hatebuxml, entrylist) #case文で対処 #eeeeeeeeeeeeeeeeeeeeeeee???何が起こってるんだ? if (fairuname == "sakura"): global sakuralist sakuralist = entrylist if (fairuname == "block"): global blocklist blocklist = entrylist if (fairuname == "excite"): global excitelist excitelist = entrylist if (fairuname == "spotcom"): global comlist comlist = entrylist if (fairuname == "spotjp"): global jplist jplist = entrylist if (fairuname == "now"): #print(entrylist) #check #あれえええええええええええ??????????ここええ?????なんで???????? global nowlist #これか? nowlist = entrylist #print(nowlist) #check #リストの戻り値が戻ってないなーどうすればいいんだ。 #グローバル変数にして、あれしよっか。case文で振り分けようか。うん。。。え???? #putouttest(finlist,fairuname+"rocalHTMLtoLIST_listdainyuutest") #ここにはあるが戻り値が戻らない。 #return(entrylist) #戻らない。 return()#リスト戻らないから戻しても無駄 def putouttest(allinlist,fname): #betatest #0、はてブから取得したタイトル #1、正確なタイトル(現URLのタイトル) #2、はてブから取得したURL #3、現在のURL #4、はてブ数 #5、日時(現アドレスから取得) #テキストファイルに出力する。 testput = "★出力確認のテスト。" for aui in range(len(allinlist)): testput = testput + "◆" + str(allinlist[aui][4]) + "◆" + allinlist[aui][1] + "\n" + allinlist[aui][3] + "\n" + allinlist[aui][2] + "\n" + str(allinlist[aui][5]) + "\n\n" #日時 #ファイルに出力 f = codecs.open("C:/pythontest/" + fname + ".txt", "w") f.write(testput) f.close() return() #<a href="trueurl">truetitle</a> #sippaiの手動処理をどうするか。 #xyzzy側で置き換で消すのが一番楽か。もうpythonはこれ以上触りたくない。 #^.*atodekesu.*\n def putouthtml(): # <a href="trueurl">truetitle</a> # hatebu "users" 日時 #0、はてブから取得したタイトル #1、正確なタイトル(現URLのタイトル) #2、はてブから取得したURL #3、現在のURL #4、はてブ数 #5、日時(現アドレスから取得) finalput = "★最終出力\n\n" for aui in range(len(finsortlist)): #メイン部分 finalput += '◆ <a href="' + finsortlist[aui][3] + '">' + finsortlist[aui][1] + "</a>\n" #後で消す部分 # finalput += "atodekesu " + str(finsortlist[aui][4]) + " users  " + str(finsortlist[aui][5]) + "__" + finsortlist[aui][0] + " 、 " + finsortlist[aui][2] + "\n\n\n" #ファイルに出力 f = codecs.open("C:/pythontest/last_last_last_finish.txt", "w") f.write(finalput) f.close() #ダウンロードセクション。#はいOKもうこれでいいあと放置。 #はてブの生url取得 def gethatebuURL(pageurl,pagenumber): #はてブのフォーマットに pageurl = "http://b.hatena.ne.jp/entrylist?sort=count&url=" + pageurl #pagenumberに従いurl完成させる if 0 <pagenumber: pageurl = pageurl + "&of=" + str(pagenumber*20) #はてブの生urlを返す return pageurl #htmlファイルを取得して返す。 def getHTML(pageurl,pagenumber): #はてブのurl namaurl = gethatebuURL(pageurl,pagenumber) #htmlを取得して「filename0^x」に保存する。 hatebuhtml = urllib.urlretrieve(namaurl, fairuname + str(pagenumber) + ".html") #はてブが存在しないページの場合は、 #「該当するエントリーは見つかりませんでした」ページがDLされるので、 #取得側ではとりあえず適当に多めに取得しといて、 #処理側で最初に切り捨てればいっか。 #戻り値無し return () #特定のurlのはてブを全て保存する。 def URLallSAVE(siteURL): #urlでループ回す。40(800エントリ)も回せば十分だろう。 for item in range(40): getHTML(siteURL,item) return() #ダウンロードセクション終わり。#はいはいここまでOK############# #間違って別のエントリーのTrueURLに誤爆して取得してしる場合の対処。 #同一list内に同じTrueURLが存在する場合はマージをパスして、 #手動で修正可能なように記述(sippaigobaku)。追って手動するなり放置するなり。 def gobakucheck(tlist): #TrueURLはxlist[x][3]にあります。 ttlist = tlist icheck = 0 for icheck in range(len(ttlist)): ihikakuaite = icheck + 1 for ihikakuaite in range(len(ttlist)): if ttlist[icheck][3] == ttlist[ihikakuaite][3]: #誤爆の疑いが濃厚。 #両者のTrueTitleに書き足す。xlist[x][1] #"(sippaigobaku。誤爆の疑いが濃厚)" #まだ失敗と認定されていない。 if (ttlist[icheck][1].find("sippai") == -1): ttlist[icheck][1] = ttlist[icheck][1] + "(sippaigobaku。誤爆の疑いが濃厚)" if (ttlist[ihikakuaite][1].find("sippai") == -1): ttlist[ihikakuaite][1] = ttlist[ihikakuaite][1] + "(sippaigobaku。誤爆の疑いが濃厚)" #ここ大丈夫?atode return(ttlist) #データのマージ。trueURLを比較する。trueURLは【xlist[x][1]】 #誤って取得したURLをまとめてしまわないよう、 #同一アドレス内はマージしてはいけない。 #1,2,3,4,5,6 #2,3,4,5,6 #3,4,5,6 #4.5.6 #5.6 #いや、、、、、待てよ。 #全部まとめてから、重複を重ねた方が楽か。 #1,これまで作ったリストを合体。^連結 #2,[3]のtrueURLで重複を探す。 #3,はてブ数を足し、後出を削除。 #4,[1]sippaiは重ねない。 def maaji(): #順次連結。6URL分、全て連結。 #ここ動かないなら深刻 global blocklist global sakuralist global excitelist global comlist global jplist global nowlist global finlist #おまじない #これ行けるのかなあ。 """ sakuralist = gobakucheck(sakuralist) blocklist = gobakucheck(blocklist) excitelist = gobakucheck(blocklist) comlist = gobakucheck(comlist) jplist = gobakucheck(jplist) nowlist = gobakucheck(nowlist) """#もういいよ。 #あくまでもテスト用(←このコメントが全ての元凶にして混乱の元) finlist = blocklist + sakuralist + excitelist + comlist + jplist + nowlist putouttest(finlist, "finsort") #マージ終了。 #????マージって何???意味がわからない。何がしたいの?何がしたかったの? #足せば終わりじゃん。明らかに不用。 #把握。足すだけね。足せば終わりだから足すだけ。だからマージか。 #いや、思い出した。 #同じエントリーなのに、分離したのをマージしたかった。 #でももうどうでもよくなった。 return() #ブックマーク数でソート。 def sortbukumasuu(tgtlist): global finlist global finsortlist finsortlist = finlist #[4]はてブ数 #.isdigit() #[4]が数字に出来るかどうかチェック。1000でも入れるか。 for ii in range(len(finsortlist)): if (str(finsortlist[ii][4]).isdigit() <> True): finsortlist[ii][4] = "1000" finsortlist.sort(key=lambda x:int(x[4]), reverse=True); ################ #動いたああああああああああああついに動いたあああああああああああ #あと動いてないのは誤爆チェックだけだ。 #あそこさえ動けばHTMLに整形してああああああああああああああうっっっっっっっっっっっっっっっ return() #do it mainloop() #テスト用 #print(getHTML("http://www.sinseihikikomori.com/",0)) #OK #URLallSAVE("sinseihikikomori.sblo.jp") #完璧 #ゴミ箱 #縺ッ縺ヲ繝悶・html繧定ソ斐☆縲・ #繧エ繝溽ョア #縺ッ縺ヲ繝悶・URL縺ィ縲√・繝シ繧ク繝翫Φ繝舌・繧貞女縺大叙縺」縺ヲ豁」縺励>URL繧貞ョ梧・縺輔○繧九・ #蜿励¢蜿悶▲縺欟RL縺ョ縲√・縺ヲ繝紋ココ豌鈴・ヵ繧ゥ繝シ繝槭ャ繝医・ #繝壹・繧ク謨ー縺鯉シ台サ・荳翫↑繧峨・of=20縲阪r莉倥¢繧九・ """ def tajyulisttest(): aaa = [ [u'グーグル', 'google', 115, "2006"], [u'リプネ', 'replay.net', 22, "2008"], [u'ユーチューブ', 'youtube', 74, "2007"], ] aaa.sort(key=lambda x: x[2], reverse=True); print(aaa[0][0],aaa[1][0],aaa[2][0]) print(aaa[0][0]) ddd=aaa[0][0] print(ddd) """ #dourl = 'https://www.google.co.jp/search?sugexp=chrome,mod=19&sourceid=chrome&ie=UTF-8&q=site%3Asinseihikikomori.com+' + key2google #key2google.decode('utf-8') #temphtml = urllib.urlopen.read(dourl) #httpres = urllib2.urlopen(dourl) #temphtml = response.read() # google_url = "http://www.google.co.jp/search?jl=ja&num=100&q" # query = "query = " + urllib2.quote(key2google) # dourl = google_url + query # # opener = urllib2.build_opener() # opener.addheaders = [\ # ('Use-Agent', 'Mozilla/5.0 (compatible; googlebot/2.1; \ # + http://www.google.com/bot.html)')] ## _opener.addheaders = [\ # # ('User-Agent', 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) \ ## #temphtml = opener.open(dourl).read() # temphtml = urllib2.urlopen(dourl).read() #【"><h3 class="r"><a href="】 # iti = temphtml.find('"><h3 class="r"><a href="') # itiend = temphtml.find('"', iti) # # return (temphtml[iti+23:itiend]) # return("test")