スナックelve 本店

バツイチ40代女の日記です

悔しいのぅ悔しいのぅ

snack.elve.club
吉祥寺で6時間飲んで、19:30頃マルセイ宅に到着
スコアは神戸1-東京0

ま、負けてるΣ(゚д゚lll)ガーン

強烈な満腹感と睡魔に邪魔されながら見ていたら追いついて、そしていつの間にか逆転してた。(睡魔強かった)

神戸1-東京2

イイネ! イイネ!! このままクローズしよう!!

ロスタイム、追いつかれる。
まだ数分ロスタイムが残っていたが帰った。
実況の人が平川怜選手のことを「かつて天才と呼ばれた男」みたいな表現してて面白かったです。

神戸2-東京2

悔しーなー!!(´;ω;`)ウゥゥ

はてなブログのソースから文字列検索。はてなブックマークから文字列検索。

大嫌いな女が好きな人に絡んでたとするじゃないですか。
「なんで絡んでんの」
って聞いたときに普通に「昔から仲いいよ」とか「友達だよ」と言ってくれればぐぬぬとなっても、納得はするわけです。

「いや、なんかわからんけど絡んできた」

みたいな下らない嘘をつかれるとイラっとしませんか?


そんな枕でなんでこんなタイトルなのか。
好きな人のブログとブクマを検索するために作ったからです(爆)



地雷女の地雷を見せてやんよ!!(たいしたことはない)みんな、自己責任だぜ!!
というわけで環境は
visualstudio.microsoft.com

Visual Studio Community落として.net開発環境いれて、c#のコンソールアプリ作成画面を選択します(早口)

はてなブログ限定。ソースから文字列を検索します。ソースのコメントとかも検索できると思う。

using System;
using System.Net;
using System.Text;
namespace ReadWeb
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient wc = new WebClient() { Encoding = Encoding.GetEncoding("utf-8") };
            // HTMLソースをダウンロードする
            //そのブログの一番古い記事のURL
            string page = "https://elve.hatenadiary.jp/entry/2018/02/22/231107";
            //検索したい言葉
            string target = "セックス";

            string last_page = "";

            while (page != "")
            {
                if (last_page == page)
                {
                    break;
                }
                string sorce = wc.DownloadString(page);
                wc.Dispose();


                int num = sorce.IndexOf(target) + 1;
                int cnt = 0;
                while (num > 0)
                {
                    cnt++;
                    num = sorce.IndexOf(target, num) + 1;
                }
                // 表示する
                if (cnt > 0)
                {
                    Console.WriteLine("{0}に{1}は{2}回出てきました", page, target, cnt);
                }
                try
                {
                    string nextP = "<span class=\"pager-prev\">";
                    string nextPStart = "<a href=\"";
                    string nextPEnd = "\"";
                    int tmpP = sorce.IndexOf(nextP);
                    int tmpPs = sorce.IndexOf(nextPStart, tmpP + nextP.Length);
                    int tmpPe = sorce.IndexOf(nextPEnd, tmpPs + nextPStart.Length);
                    last_page = page;
                    page = sorce.Substring(tmpPs + nextPStart.Length, tmpPe - tmpPs - nextPStart.Length);

                }
                catch
                {
                    page = "";
                }
            }

        }
    }
}

実行すると
f:id:elve:20200913125417p:plain
こんな感じで検索したい単語がいつの記事に何回出てるかわかります。
出力ファイルにしたほうがいいかもです。

だいぶキモいですね。やめずに行きますよ!!
同じような方法でブクマページも検索してみました。

実際に対象に実行した結果ですw キモイことこの上ないけど気にしたら負けですよ!?
f:id:elve:20200913125955p:plain

ブクマ1ページに20ブクマ入っててそこに何件出てくるかがわかってもあんまり意味ネーナ、と。
中身解析せねば・・・beautifulsoup的なものがほしいぞ・・・

似たようなお悩み
c# - C#プログラマー向けのWebスクレイピング(HTMLAgilityPackまたはPython + beautifulsoup)のためのより良いオプション

HTMLAgilityPackってのを使うといいらしいよ!!
導入はこちらなど参照
www.atmarkit.co.jp

using System;
using System.Net;
using System.Text;
namespace ReadWeb
{
    class Program
    {
        static void Main(string[] args)
        {
            //ブクマページ
            string url = "https://b.hatena.ne.jp/elve/";
            //検索したい文字列
            string target = "男";


            WebClient wc = new WebClient() { Encoding = Encoding.GetEncoding("utf-8") };
            string sorce;
            try 
            { 
                // HTMLソースをダウンロードする
                sorce = wc.DownloadString(url);
                wc.Dispose();
            }
            catch
            {
                Console.WriteLine("url異常?");
                wc.Dispose();
                return;
            }
            //ブクマ数取得
            string cttag = "userprofile-status-count\">";
            int maxBkmS = sorce.IndexOf(cttag) + cttag.Length;
            string toji = "<";
            int maxBkmE = sorce.IndexOf(toji, maxBkmS);
            int maxbm;
            //文字列から数字に変換
            try
            {
                maxbm = Int32.Parse(sorce.Substring(maxBkmS, maxBkmE - maxBkmS).Replace(",", ""));
            }
            catch
            {
                return;
            }
            //ページ数取得
            int last_page = maxbm / 20;
            //端数があったら+1ページ
            if ((maxbm % 20) > 0)
            {
                last_page++;
            }

            for (int i = 1; i <= last_page; i++)
            {
                string page = url + "bookmark?page=" + i.ToString();
                sorce = wc.DownloadString(page);
                wc.Dispose();



                var htmlDoc = new HtmlAgilityPack.HtmlDocument();
                htmlDoc.LoadHtml(sorce);

                var articles
                   = htmlDoc.DocumentNode
                     .SelectNodes(@"//ul[@class=""js-user-bookmark-item-list js-keyboard-controllable-container""]");
                foreach (var article in articles)
                {
                    int displayflg = 0;
                    string[] flg = {"[ ]", "[ ]", "[ ]", "[ ]" };
                    string title = article.SelectSingleNode(@"//h3/a").InnerText;
                    string bkurl1= article.SelectSingleNode(@"//h3/a").GetAttributeValue("href", "");
                    var bkm = article.ParentNode.SelectSingleNode(@"//div [@class=""centerarticle-reaction js-user-bookmark-id-container""]/div[@class=""centerarticle-reaction-comment js-user-bookmark-comment ""]");
                    string bkcmntUrl = bkm.SelectSingleNode(@"//div/span/a").GetAttributeValue("href", "");
                    string bkcmnt = bkm.SelectSingleNode(@"//div/span[@class=""js-comment""]").InnerText;

                    //
                    if (title.IndexOf(target) > 0) { flg[0] = "[*]"; displayflg = 1; }
                    if (bkurl1.IndexOf(target) > 0) { flg[1] = "[*]"; displayflg = 1; }
                    if (bkcmntUrl.IndexOf(target) > 0) { flg[2] = "[*]"; displayflg = 1; }
                    if (bkcmnt.IndexOf(target) > 0) { flg[3] = "[*]"; displayflg = 1; }
                    if (displayflg > 0)
                    {
                        Console.WriteLine("===\n記事タイトル  :{0}{1}", flg[0], title);
                        Console.WriteLine("記事URL    :{0}{1}", flg[1], bkurl1);
                        Console.WriteLine("ブクマURL   :{0}{1}", flg[2], bkcmntUrl);
                        Console.WriteLine("ブクマコメント :{0}{1}\n", flg[3], bkcmnt);

                    }

                }

            }

        }
    }
}

出力こちらもファイルに出したほうがいいかも。
f:id:elve:20200913131409p:plain

こんな感じで検索ワードがある項目に[*]が付きます。あんま意味ないかもw

楽しかった。
もう、関数終了させるのreturnっての忘れるくらいc#触ってなかったけど動くものができてよかったw

参考サイト
配列ってどう書くっけ? から
【C#入門】string(文字列)配列の操作(追加、削除、結合、変換、検索) | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
割り算のあまりの出し方忘れた。vbaだとmodだけど、Cは%でした。
算術演算子 - C# リファレンス | Microsoft Docs
ベース
ネットワーク上のHTMLファイルの読み込み

html-agility-pack.net

吉祥寺でデートしてきた!

今週のお題が「おいしくもりもり」ならちょうどいいと思ったけどよく見たら「ご飯のお供」だったので違うw
f:id:elve:20200912214353p:plain

最近腐っていたので、肉を食って充電することに。横チン(id:yokobentaro)とデートでした♡

いせやに行こうという話をしていて、マリさんから混むよ、と情報を得たので開店時(12時)に行こうと11:30に駅で待ち合わせたけど、横チンも私も割と時間前につく人間。11時に合流。
合流時には横チンがお店のチェックまでしてくれてた(*^▽^*)

餃子酒場

gyouza-kichijoji.owst.jp

餃子が熱かったwwww 餃子とほうれん草入った餃子と大根サラダと後なんか頼んだ。
もう結構おなかいっぱいですw

いせや

開店前についたら並んでたΣ(゚д゚lll)ガーン
f:id:elve:20200912215130j:plain
www.kichijoji-iseya.jp

お勧めではない。お楽しみ品である。頼むしかない。
f:id:elve:20200912215220j:plain

柔らかくて美味しい~(゚д゚)ウマー
f:id:elve:20200912215251j:plain

唐揚げも旨い
f:id:elve:20200912215457j:plain

すでに腹いっぱいで目的の焼き鳥がそんなに食べられなかったw
f:id:elve:20200912215543j:plain

と言いながらトウモロコシを食べたがるwww
f:id:elve:20200912215617j:plain

人生とか語ってたwwwww

串カツ田中

生姜屋黒兵衛にも行きたいと言っていて、時間調べて行ってみたら開店してなかったのでその上の串カツ田中へ。
チンチロリンは倍量。横チンは半額2回+倍量1回。
旨かった。腹いっぱいと言っておいて食うなぁwww

ミイラについて熱く語ってしまった。骨と死体の間というか、生と死の間というか、ミイラはとても興味深い。科博行かなきゃw

関係ないけど、いせやからここに行く途中の古着屋さん(?)のマネキンがすごくかわいいワンピース着てたので、5000円くらいなら欲しい(けち)と思ったのだけど値札が見えなくて店員も見えなくて残念だった。

あと、井之頭公園に行ったことがないのでいつか行きたい。

生姜屋黒兵衛

生姜好きのマリさんも今度誘いたい。駅からすぐのところにある。
syogaya-kurobe.jp

ホントさすがに食えない、と言いながら7種の盛り合わせ的なものを頼んでしまうw
f:id:elve:20200912220501j:plain
f:id:elve:20200912220447j:plain

魚(なんだっけ? 昆布締め)もスゲー旨い!!(だからどれだけ食ってるんだよw)
f:id:elve:20200912220551j:plain



横チン付き合ってくれて・・・っていうか全部おごらせてごめん。今度は俺が払うから(´;ω;`)ブワッ すごく楽しかったです!! ありがとうございました!!

キモさをわざわざ自称する心理

読みやすさのため、ひらがな名をカタカナ表記にしております。(今までもw)
特にメンション飛ばすほどの話でもないし、言えば言ったで甘噛み扱いされるので悩ましいのですが、陰口とか言われるのも面倒だからみんな大好き(僕の敵)ワベさん(id:punkrockers)の話です。

私のスタンスとしては「みんなキモくて、みんなキモい」を心に刻みましょう。善し悪しの判断はするな。自分を含めてみんなキモいのだ的な感じです。
ですからことさら自分がキモイことをアピールする必要はないと思っています。
たまにキモい文章書いて、うわぁキモいって書いちゃうくらいかな★←キモイw

仕事仲間が「昔バンドやってた」「髪が腰まで伸びていた」という話をしてきたとき、本人が髪形の話をしているつもりでも、受け手はもっと多くの情報を受け取りますよね?
うわ、昔話だよwww
うわ、自分語りだよwww
うわ、ちょっと変わってた俺アピールキタコレwww
などなどですw

またワベさん自身もわかっているのか、「スーツ」という髪形以外のワードを出して今度はバンド仲間の評価を書かれています。
「スーツ着てオールバックの私」のキモさは髪形だけではないと自白しているわけです。

ですからまぁ、ツッコミますよね?
突っ込んだら真顔で反論してくるんすよ。
お得意の周囲に恵まれてる私アピールです。後出しとマウント大好きなおっさんなので仕方ありません。

で、ワベさんの固定ツイートを見るとですね

なんてことを言ってるんですね。この自称はなんなんだろうな、と。

ワベさんのキモさは「頭ズルムケ小太りブサイクなオッサンのくせにいつも偉そうな事言っててめっちゃキモイ」ではないし、よりたちが悪いと思います。
頭ズルムケ小太りブサイクなオッサンのくせにいつも偉そうな事言ってる人に謝ってほしいくらいですw

今日は絶不調!!

バイオリズムみるとまだまだこれから下がるぜ!!
f:id:elve:20200911194303p:plain

keisan.casio.jp

(´Д`)ハァ…

昨日の夜来ていた仕事依頼メールも、偉い人から言われた仕事も忘れてて催促受けてしまったorz
いかんなぁ。

久しぶりにプログラム描こうと思ってVisual studio Code立ち上げたら全然動かねーし。
死にたみマックスバリューです(意味がわからない)
仕方ないのでC#で書いたけどさっぱりわからんからコピペの嵐。

(´Д`)ハァ…

まぁまたそのうちすぐ幸せ~とか言うのではあろうが。
脳内麻薬怖い。ドーパミンドーパミンが出るからね。
結局薬物にたどり着くのだろうか。

f:id:elve:20200911202146p:plain