MFC/WindowsAPIでURL指定ファイルダウンロード キャッシュ使わない版

結局DeleteUrlCacheEntry()使わないとキャッシュ使われちゃう。
OpenURL()とかにflag指定あるけど機能してないっぽい。

BOOL Web_Downloader(LPCTSTR lpszURL, LPCTSTR lpszFileName)
{
	CInternetSession session;
	CStdioFile file;
	CInternetFile* pFile = NULL;
	DWORD dwBytesRead = 0;
	BOOL bSuccess = FALSE;

	try
	{
		DeleteUrlCacheEntry(lpszURL);

		pFile = (CInternetFile*)session.OpenURL(lpszURL);
		if (pFile != NULL)
		{
			if (file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
			{
				const long buffersize = 5*1024*1024;
				BYTE *buffer = new BYTE[buffersize*2];
				DWORD dwRead;
				while ((dwRead = pFile->Read(buffer, buffersize)) > 0)
				{
					// ファイルに書き込み
					file.Write(buffer, dwRead);
					dwBytesRead += dwRead;

					// 進捗を表示
					// ファイルサイズをカンマ付きの文字列に変換して、ダイアログに表示する
					char szBuf[128];
					int2NumberFromat(szBuf, 128, dwBytesRead);
					CString message;
					message.Format(_T("%s byte ダウンロード済み"), szBuf);

				}
				file.Close();
				bSuccess = TRUE;

				delete [] buffer;
			}
		}
	}
	catch (CInternetException* e)
	{
		e->Delete();
		if (pFile != NULL) {
			pFile->Close();
			delete pFile;
		}
	}

	if (pFile != NULL) {
		pFile->Close();
		delete pFile;
	}

	return bSuccess;
}

SBI証券で対応している米国株式取扱銘柄一覧取得 python

当然SBI証券のページ構成が変わったら使えなくなります。

import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html"
response = requests.get(url)
response.encoding = response.apparent_encoding  #エンコーディング指定。これないと日本語文字列が文字化けする
soup = BeautifulSoup(response.text, "html.parser")

# テーブルから必要な列(ティッカー)を抽出
stock_tickers = []
etf_tickers = []
adr_tickers = []

with open("tickers.csv", "w", newline="") as csvfile:
    writer = csv.writer(csvfile)

    tables = soup.find_all("table", class_="md-l-table-01")

    #普通株式 収集
    table = tables[0]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        stock_tickers += df['ティッカー'].tolist()

    #ETF 収集
    table = tables[1]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        etf_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in stock_tickers:
        writer.writerow([ticker, "stock"])

    for ticker in etf_tickers:
        writer.writerow([ticker, "etf"])

    #ADR 収集
    tables = soup.find_all("table", summary="layout" )

    for table in tables:
        df = pd.read_html(str(table))[0]
        if 'ティッカー' in df.columns:  # ティッカー列がある場合
            adr_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in adr_tickers:
        writer.writerow([ticker, "adr"])

chatGPT APIを使ってローカルchat python

ローカルでカスタマイズして実行できるし。
ChatGPT Plusにお金払うより安く済みそう

import openai


def main():
    openai.api_key = "API CODEをここに書いてね"
    amount_tokens = 0
    chat = []

    # ChatGPTへの設定を書いておく
    chat.append({"role": "system", "content": "Please respond as a seasoned OpenAI programmer."})
    chat.append({"role": "system", "content": "Please think in English and translate your answer into Japanese."})
    chat.append({"role": "system", "content": "If you need additional information to get the best results for this task, please ask questions!"})

    print("チャットをはじめます。q または quit で終了します。")
    print("-"*50)
    while True:
        user = input("<あなた>\n")
        if user == "q" or user == "quit":
            print(f"トークン数は{amount_tokens}でした。")
            break
        else:
            chat.append({"role": "user", "content": user})

        print("<ChatGPT>")
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",messages=chat
        )
        msg = response["choices"][0]["message"]["content"].lstrip()
        amount_tokens += response["usage"]["total_tokens"]
        print(msg)
        chat.append({"role": "assistant", "content": msg})


if __name__ == "__main__":
    main()

急にWin32でMFC使ったプロジェクトがビルドできなくなった時の対処

Visual Studio 2022で気が付いたら32bitビルドに切り替えるとMFCが見つからないといわれるようになった。

多分VS2022本体のアップデートがきっかけだとおもう。

・ツールメニューから「ツールと機能を取得」を選択
・ダイアログ ボックスの上部にある [個別のコンポーネント] タブを選択します。
・[コンポーネントの検索] ボックスに「MFC」と入力します。
・プロジェクトのターゲットに一致する MFC コンポーネントを選択します (x86 や ARM64EC など)。 Spectre 軽減策を有効にしてプロジェクトをビルドする場合は、Spectre 軽減策を含むコンポーネントを選択します。

ターゲットがわからない場合は手あたり次第にインストール。
こちらではこれで解決した。ほんとは余計なのは削ったほうがいいんだけどね

紙copiからObsidianにお引越し

紙copiが検索後にフリーズする問題が解決しないのでえ代替アプリを探してたら先駆者がおられました。
拡張子.txtを.mdに変換するだけで移行完了。ありがたい。

オプションで日本語にして、
「タブの使用」をOFFにすると使い勝手が紙copiっぽくなります。

ネタ元

celestyblog.com

pythonで日本の金融市場の前営業日取得

chatGPTに聞いたやつを整頓。
'TSE'は使えなかったので'Financial_Markets_JP'を指定。これであってるのかは不明。
情報が古かったのかな。

import pandas_market_calendars as mcal

def get_prev_bizdayTSE(date):

    date = datetime.datetime.strptime(date, '%Y/%m/%d').date()
    tdy = mcal.get_calendar('Financial_Markets_JP').valid_days(start_date=date, end_date=date)[0]
    prev_day = (tdy - datetime.timedelta(days=1)).date()
    bday = mcal.get_calendar('Financial_Markets_JP').valid_days(start_date=prev_day, end_date=prev_day)[0].date()
    while bday != prev_day:
        prev_day = prev_day - datetime.timedelta(days=1)
        bday = mcal.get_calendar('Financial_Markets_JP').valid_days(start_date=prev_day, end_date=prev_day)[0].date()
    return bday.strftime('%Y/%m/%d')