Remote Development

forest.watch.impress.co.jp

www.server-world.info

Ubuntu

ssh-keygen -t rsa 
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 
chmod 600 ~/.ssh/authorized_keys 

Windows

”id_rsa”を”C:\Users\imabari.ssh\”にsftpでコピー ”id_rsa”を”/id_rsa-remote-ssh”に名前を変更

C:\Users\imabari.ssh\config

Host alias
    HostName 192.168.0.80
    User imabari
    IdentityFile ~/.ssh/id_rsa-remote-ssh

買った

とりあえず基本的なことだけ

思ってたのと違った

NEC LaVie LL750/MをWindows10の1903にアップデートするとWi-Fiがつながらない

ark.intel.com

www.ikt-s.com

ch.nicovideo.jp

  • バイスマネージャーを見ると!マーク
  • ドライバをアンインストールしてから認識させるとつながるが再起動するとまたつながらない
  • 有線でインターネット接続しWindowsUpdateでもドライバ更新されない。
  • intelのドライバを検索したが最新のため更新不要
  • ドライバをダウンロードしてみたが途中でアイコンが消える管理者でインストール?

www.fmworld.net

1810に戻すとつながるがよく切れるらしい、省電力はチェックを外して様子見

pc-maint-note.com

www.intel.co.jp

接続が切れているのでこれと交換 1903でしばらく使ってみたが安定して動いてます

MediaCreationTool1903.exeが0x80042405 0xA001Bエラーで止まる

MediaCreationTool1903.exe

でUSBのインストールディスクを作成すると0x80042405 0xA001Bエラーで止まる

ISOは作成可能

32GBのUSBメモリはエラー 16GBのUSBメモリはOK

16GBのUSBのイメージを取り込んで32GBに書き込んでとりあえず動いています。

www.microsoft.com

ユーザーエージェントをiPhoneに変えておけば上記アドレスからISOダウンロードできます

容量が4.7GBのためDVD片面だと容量オーバーなためDLまたはBlu-rayに焼けば使えます。

rufusからUSBメモリでも作成可能

rufus.ie

スプレッドシートで宇連ダムの貯水率をスクレイピング

宇連ダムの直近3日間の貯水率

グラフ

https://docs.google.com/spreadsheets/d/e/2PACX-1vRP5h5tfr7pS8WQFhjeR9FXA3dN-sBgLnn_ieNJ3xDuuCxxts5FykwLU-5KXB0uO3hbpjXEcPoC2_Au/pubchart?oid=1171154367&format=interactive

スプレッドシート

docs.google.com

宇連ダムをスクレイピング

twitter.com

貯水率がないのですが計算しているのかな?

[http://i.river.go.jp/-p01-/p/ktm1801060/?mtm=0&swd=&prf=2301&twn=2301221&rvr=&den=1920300700002]

http://163.49.30.82/cgi-bin/DspDamData.exe?ID=1368050651020&KIND=3&PAGE=0

利水容量28420千m3

www.city.gamagori.lg.jp

www2.big.or.jp

import re

import requests
from bs4 import BeautifulSoup

dam_name = '宇連ダム'
url = 'http://i.river.go.jp/_-p01-_/p/ktm1801060/?mtm=0&swd=&prf=2301&twn=2301221&rvr=&den=1920300700002'

headers = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}

r = requests.get(url, headers=headers)

if r.status_code == 200:

    soup = BeautifulSoup(r.content, 'html5lib')

    contents = soup.find('a', {'name': 'contents'}).get_text('\n', strip=True)

    # print(contents)

    # サブタイトル・単位を除去
    _temp = re.sub(r'■\d{1,2}時間履歴\n単位:千m3\n', '', contents)

    lines = [i.split() for i in _temp.splitlines()]

    for line in lines:

        try:
            _time, _rate = line
            rate = float(_rate)
        except:
            continue
        else:
            rate = round(rate / 28420 * 100, 1)
            print('ただいまの{0}の貯水率は{1}%です({2})'.format(dam_name, rate, _time))
            break

    else:
        print('取得できませんでした')

imabari.hateblo.jp

imabari.hateblo.jp

imabari.hateblo.jp

JFLゴール数ランキング(GoogleDrive)

imabari.hateblo.jp

import csv
import time
from urllib.parse import urljoin

import gspread
import pandas as pd
import requests
from bs4 import BeautifulSoup
from oauth2client.service_account import ServiceAccountCredentials

from tqdm import tqdm


def cleaning(info, team, data):

    result = []

    for trs in data:

        temp = [i.get_text(strip=True) for i in trs.select("th, td")]

        # 時間の分を除去後、延長時間を計算
        temp[0] = eval(temp[0].rstrip("分"))

        # 選手名のPKを削除
        temp[2] = temp[2].replace("(PK)", "").strip()

        result.append(info + [team] + temp)

    return result


def scraping(n, url):

    r = requests.get(url)

    if r.status_code == requests.codes.ok:

        soup = BeautifulSoup(r.content, "html5lib")

        # シーズン・節
        score_season = soup.select_one(
            "div.score-header > h2.score-meta > span.score-season"
        ).get_text(strip=True)

        # 節
        score_season = score_season.strip("第節")

        # print(score_season)

        # 日時
        score_date = (
            soup.select_one("div.score-header > h2.score-meta > span.score-date")
            .get_text(strip=True)
            .split()
        )

        # print(score_date)

        # チーム名
        score_table = soup.select_one("table.score-table")

        home_team = score_table.select_one("th.score-team1").get_text(strip=True)
        away_team = score_table.select_one("th.score-team2").get_text(strip=True)

        # print(home_team, away_team)

        # 試合情報
        game_info = [n, score_season] + score_date + [home_team, away_team]

        # 得点
        for i in soup.select("div.section > h3"):

            # 得点のテーブルか確認
            if i.text == "得 点":

                table = [
                    trs
                    for trs in i.parent.select(
                        "div.score-frame > div.score-left > table > tbody > tr"
                    )
                ]
                home_data = cleaning(game_info, home_team, table)

                table = [
                    trs
                    for trs in i.parent.select(
                        "div.score-frame > div.score-right > table > tbody > tr"
                    )
                ]
                away_data = cleaning(game_info, away_team, table)

                score_data = home_data + away_data

                return score_data

        return None


if __name__ == "__main__":

    url = "http://www.jfl.or.jp/jfl-pc/view/s.php?a=1411&f=2019A001_spc.html"

    r = requests.get(url)

    if r.status_code == requests.codes.ok:

        soup = BeautifulSoup(r.content, "html5lib")

        with open("result.csv", "w") as fw:
            writer = csv.writer(fw, dialect="excel", lineterminator="\n")

            # ヘッダー
            writer.writerow(
                ["試合", "節", "日付", "時刻", "ホーム", "アウェイ", "チーム名", "時間", "背番号", "選手名"]
            )

            n = 0

            links = soup.select("td.detail-link > a")

            for link in tqdm(links):

                # 詳細のリンクか確認
                if link.text == "詳細":

                    n += 1

                    spc_url = urljoin(url, link.get("href"))

                    # 詳細をスクレイピング
                    score_data = scraping(n, spc_url)

                    # CSVに保存
                    if score_data:
                        writer.writerows(score_data)

                    # 3秒待機
                    time.sleep(3)

        df = pd.read_csv("result.csv")

        df["得点"] = 1

        # ゴール数ランキング
        pv_goal = df.pivot_table(
            values="得点", index=["選手名", "チーム名", "背番号"], aggfunc=sum, fill_value=0
        )

        pv_goal = pv_goal.reset_index()

        # オウンゴールを削除
        pv_goal.drop(pv_goal.index[pv_goal["選手名"] == "オウンゴール"], inplace=True)
        pv_goal["背番号"] = pv_goal["背番号"].astype(int)

        # ランキング
        pv_goal["順位"] = pv_goal["得点"].rank(ascending=False, method="min").astype(int)

        # チーム
        jfl_2019 = [
            "Honda FC",
            "FC大阪",
            "ソニー仙台FC",
            "FC今治",
            "東京武蔵野シティFC",
            "MIOびわこ滋賀",
            "奈良クラブ",
            "ヴェルスパ大分",
            "ラインメール青森",
            "ヴィアティン三重",
            "テゲバジャーロ宮崎",
            "FCマルヤス岡崎",
            "ホンダロックSC",
            "流経大ドラゴンズ龍ケ崎",
            "松江シティFC",
            "鈴鹿アンリミテッド",
        ]

        team = {name: i for i, name in enumerate(jfl_2019, 1)}

        pv_goal["チームID"] = pv_goal["チーム名"].map(team)

        # 順位・チーム名・選手名で昇順
        pv_goal.sort_values(
            ["順位", "チームID", "背番号"], ascending=[True, True, True], inplace=True
        )

        pv_goal.drop(["チームID", "背番号"], axis=1, inplace=True)

        pv_goal.set_index("順位", inplace=True)

        # スプレッドシート

        scope = [
            "https://spreadsheets.google.com/feeds",
            "https://www.googleapis.com/auth/drive",
        ]

        credentials = ServiceAccountCredentials.from_json_keyfile_name(
            "jfl-ranking.json", scope
        )
        gc = gspread.authorize(credentials)

        workbook = gc.open_by_key("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

        # ランキング更新

        rank_data = pv_goal.reset_index().values.flatten().tolist()

        worksheet = workbook.worksheet("得点ランキング")

        cell_list = worksheet.range("A2:D201")

        for cell, v in zip(cell_list, rank_data):
            cell.value = v

        worksheet.update_cells(cell_list)