日記

更新頻度はあまり高くはありませんがネタがあったら書いていこうと思います。

GolangでSteamのセール情報を取得するクローラを作った。

Amazon.co.jp: Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例: るびきち, 佐々木 拓郎: 本 という本を読んでいて何か実際に実装してみたいなと思い、Steamのセールを取得して保存するクローラをGoで作成しました。
このソフトウェアではSteamのセールページをクローリングしてゲームのセール情報をすべて取り出すことができます。

Go言語で並列化を実装したので約400ページ、約6000ゲームの情報を10秒程で取得できます。また、取得したものをCSV形式でファイルに保存するようにしました。
並列化部分の実装は下記のようになっています。

// StartCrawl start crawling.
func (c *Crawler) StartCrawl() (err error) {
    doc, err := goquery.NewDocument(url)
    if err != nil {
        return
    }

    // Getting the number of pages.
    var pageNum int
    doc.Find(".search_pagination_right").Children().Each(func(i int, s *goquery.Selection) {
        if i == 2 {
            pageNum, err = strconv.Atoi(s.Text())
            if err != nil {
                return
            }
        }
    })

    // Starting goroutine.
    resultCh := make(chan []Game, pageNum)
    for i := 1; i < pageNum+1; i++ {
        url := fmt.Sprintf("%s&page=%d", url, i)
        go c.crawl(url, resultCh)
    }

    // Collectiong games.
    for i := 1; i < pageNum+1; i++ {
        gs := <-resultCh
        c.games = append(c.games, gs...)
    }
    close(resultCh)

    return
}

ページネーションからページ数を取得できるので、取得したページのURLを作成し、1ページにつき1つのGoroutineを稼働させChannelを使って回収しています。HTMLのスクレイピングにはgoqueryというライブラリを使用しました。

また、コードはすべてGithub上で公開しています。

github.com

Python+tweepyでフォロワー増殖装置を作った。(+TwitterAPIの考察)

それがそのソースコードです。

Function to increase follower on twitter

qWordというタプルにフォローしたいアカウントのキーワードを入れることで自動的にフォローを行います。 さらにリフォロー率をあげるために、If文でフォロワーよりフォローしている人数が多いユーザーをフォローするようにしています。 Twitter APIにはリクエスト制限(180リクエスト/15min)があるので、1ワードにつき50回リクエストをするので3ワード(150リクエスト)で15分のスリープを行います。

しかしながら、フォローしまくってしまうと161エラーという「もうフォローできない」という趣のエラーが出てしまいます。 1日のフォロー制限は1000人のはずですが、これはそれよりも早い段階で出てしまうようです。 さらに、Twitter APIのユーザ検索は検索上位1000人を検索出来ると書いてあるのですが、実際には27回リクエストつまり540人しか検索出来ずに、それ以降は同じユーザがでてきました。

以上の理由から1000人は自動フォローできませんでした。 他のやり方を知っている方がいましたら教えていただきたいです。

Python+tweepyで自動フォロー装置を作った。

PythonでTwitterAPIを使ってみました。 PythonにはtweepyというTwitterAPIのラッパーライブラリがあるのでそれを使ってみました。

こんな感じになりました。

def followAndUnfollow(api):
    followersIds = api.followers_ids()
    friendsIds = api.friends_ids()


    #フォロアーにそのユーザが存在しなければアンフォロー
    for friendId in friendsIds:
        count = 0
        for followerId in followersIds:
            if friendId==followerId:
                break
            count+=1   
        if count == len(followersIds):
            try:
                api.destroy_friendship(friendId)
                print 'Destoroyed friendship with %s' %friendId
            except tweepy.error.TweepError:
                print 'I could not destroy this friendship.:('

    #フォローしていないフォロアーがいればフォロー
    for followerId in followersIds:
        count=0
        for friendId in friendsIds:
            if followerId == friendId:
                break
            count += 1
        if count == len(friendsIds):
            try:
                api.create_friendship(followerId, True)
                print 'Created friendship with %s :)' %followerId
            except tweepy.error.TweepError:
                print 'I could not create this friendship.:('

あとはこれを適当なサーバにデプロイしてスケジューラで実行すれば、勝手にフォロー、アンフォローをしてくれると思います。

たまにidを参照できずにエラーが出るので例外処理を入れました。

自然気胸入院、手術体験記2

 

昨日無事退院することが出来ました。  結局手術をしました。  

先週の金曜日まで気胸によるエアリーク(肺の空気漏れ)もなく順調に見えたのですが、先週の土曜日にまたブラ(嚢胞)が破れたらしく、エアリークが出始めました、結局エアリークは収まらずに、1週間たってしまったので内科治療(胸腔ドレナージ)をやめて外科の治療(手術)を受けることを告げられました。

 

今までは呼吸器科の入院病棟は埋まっていたので小児病棟にいたのですが、手術が決まったので、外科病棟に移りました。  外科病棟のほうが綺麗でよかったです。  それから、手術の説明を受けて、全身麻酔の説明を受けました。  この説明を聞いている間生きている心地がしませんでした。

 

そして手術当日10月16日木曜日、全身麻酔をするので前日の夜から何も飲まず食わずだったので、お腹が空いていましたが、手術は3例目で午後だったので、寝たり、音楽を聞いたりして気を紛らわして待ちました。  そして、15時30分ごろついに看護師が病室にきて手術着に着替えさせられ手術室に連れて行かれました。 手術室がある手術センターはとても騒がしく、でかい機械が無数にあり、なにか工場のようなところだと感じました。

 

そして、硬膜外麻酔という24時間麻酔を注入して手術後の痛みを緩和するために背中にさす麻酔をしました。  これがとても痛く3度ほど局所麻酔をしたのを覚えています。  それが終わると点滴とマスクによる全身麻酔が行われ即座に深い眠りに落とされました。

 

目が覚めると、担架に寝かされていました。  手術中は人工呼吸器が喉に挿管されるので苦しいかと思いきや、目が覚めた時にはもう取れていて苦しくはありませんでした。  でもとにかく強烈に体が痙攣していて電気毛布をかけられていたのを覚えています。  

 

それからもとの病室に戻って寝かされました。  本当の地獄はこれからでした。  

 1番いやっだたのが、手術中の姿勢のせいで左腕が極度の筋肉痛になっていて全く動かせないどころか動かさなくても痛かったことです。  胸の痛みよりもこれが辛かったです。  あと、体中に取り付けられた管やらマスクやらが鬱陶しく、とても眠るどころの話ではありませんでした。  この時体には、胸の排液を取り出すための胸腔ドレーン、尿管、点滴、血圧計、酸素飽和度を測る線、酸素マスク、心電図を測る線、背中の硬膜外麻酔の管が取り付けられていました。  おまけに、寝返りを打てないので、途中から腰痛も加わりました。  この状態で誰が眠れるのかと。。。

 

大変申し訳なかったのですが、5回以上はナースコールをおしてしまいました。  看護師さんに「今何時ですか?」と聞いて「10時。」と言われた時は今までで1番の絶望を味わいました。  なぜなら、自分は3時くらいだと思っていたからです。  これほど朝になって欲しいと切望したことはありませんでした。  あと夜中に熱が高かったので、2本血液を取られましたが、左腕がきになって全然いたくありませんでした。

 

朝になってベッドを起こしてもいいと言われてやっと落ち着きを取り戻せました。  それから、尿管と胸腔ドレーンを抜管し、次の日に硬膜外を抜いて退院出来ました。  こんなに早くていいのかと驚きましたが、ほとんどの人が入院後2、3日で退院できるそうです。  

 

  • まとめ

この自然気胸という病気は、肺にブラという嚢胞ができて、それに穴が空いてそこから、空気が漏れるという病気なのですが、大変再発率が高くたちの悪い病気です。  さらに、原因不明で、若いヤセ型の男性に多く見られる病気です。  例えばこの方

気胸物語(top)

のように10回以上再発することもあるようです。

 

再発率は自然に穴がふさがった場合、30~50%、胸腔鏡手術をしてブラを切除した場合5~10%、開胸手術をしてブラを取った場合1%くらいといった感じです。  なので、自然に治って(内科的治療で)も、多くの人が再発するらしいです。  よって、早めに手術してしまったほうがいいのではとも思います。  でももう手術はうんざりです。

 

以上が僕の気胸体験でした。  ではまた。

 

自然気胸入院、手術体験記1

遡ること2日、10月5日日曜日。その日は関東への台風18号上陸前日のことでした。

 
僕はその日、台風上陸前日なので都心も人が少ないのではないかと考え新宿に向かいました。
新宿を歩いていると、突然肩から腰にかけて鈍痛を感じました。
それから少し歩いていると、更に痛みが増して歩くのも辛くなってきました。少し休憩しようと飲食店を探したのですがどこも満員でした。
歩くのがつらいので、JR新宿中央東口で休憩する事にしました。
 
それでも良くならなかったので、家に帰る事にしました。しかし、痛みは収まらず、電車に座っているときも続いていました。
 
家に帰れそうになかったので、途中で降りて救急車を呼ぶ事にしました。駅員さんに頼んで救急車を呼んでもらい、病院まで運んで頂きました。
そうすると不思議と痛みが引いていって病院に着く頃には殆ど無くなっていました。
 
病院に着くと先生に念のためCTを撮ると言われました。
 
 
肺が破裂していました。
 
 
肺が破裂し穴が開いて空気が漏れていました。自然気胸という病気とのことでした。痛みが引いたのは体が片方の肺で呼吸する事に順応していたようです。
その日はまだ肺の収縮が小さかったので、明日また近くの病院に行くように言われました。
 
そして次の日、近くの総合病院へ行きました。そこで待つこと5時間、やっとのことで診察となりました。
軽い気胸の場合、自宅で安静にしていれば治るとのことだったので、気楽にしていましたが、その日撮ったレントゲンには5割ほどに縮んだ肺が写っていました。
そして、めでたく緊急入院。
 
即、肺にチューブを挿入され、肺の空気を抜く治療になりました。これ聞いた時の絶望感は忘れられません。
 
 
てことで今私はチューブを挿入され入院しています。1週間くらいで治るらしいのですが、治らない場合手術らしいです。
今は手術を回避するために必死に休んでいます。
 
ではまた。