スナックelve 本店

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

【取り扱い注意】はてなブログクリーナー

過去記事インポート依頼中。

前作ったのが動かなくなってたので修正
Seleniumが4になってたりなんだり?
ブログを削除はしないけど記事を全消ししたいときにご参照ください。
たまに止まりますw(再実行を繰り返すしかないw)

# Use Webdriver Manager for Python: https://github.com/SergeyPirogov/webdriver_manager

# Import code:
from selenium import webdriver
from time import sleep
import re
from selenium.webdriver.common.by import By

URL = 'https://elve.hatenadiary.jp/'#削除するURL
ID = 'elve'#はてなID

##### 後で消す#####
PASS = '****************'#パスワード


# Chrome Webドライバー の インスタンスを生成
driver = webdriver.Chrome()

# ログイン画面
driver.get("https://www.hatena.ne.jp/login")
sleep(0.5)
hatena_id =  driver.find_element(By.ID, "username")
hatena_pass =  driver.find_element(By.ID, "password")
hatena_id.send_keys(ID)
sleep(1)
hatena_pass.send_keys(PASS)
sleep(1)
login_button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
login_button.click()
sleep(1)
# 記事の管理
# 'https://blog.hatena.ne.jp/'+ID+URL+'/config'

driver.get('https://blog.hatena.ne.jp/'+ID+'/' +
           re.sub('https*://', '', URL)+'entries')
sleep(0.5)
#次のページがある限りループ
while True:
    #すべての記事にチェック
    allchkbox = driver.find_element(By.XPATH,'//*[@id="admin-main-wrapper-inner"]/div[2]/section/div[7]/table/thead/tr/th[1]/div[1]/input')
    if not allchkbox.is_selected():
        allchkbox.click()
    #削除
    dlbtn = driver.find_element(By.XPATH,'//*[@id="admin-main-wrapper-inner"]/div[2]/section/div[7]/div[1]/div[2]/button')
    dlbtn.click()
    #削除しますか→OK
    driver.switch_to.alert.accept()
    try:
        #次のページ取得
        nt = driver.find_element(By.CLASS_NAME,'pager')
        #クリックしてすべてのチェックボックスリセット
        nt.click()
        sleep(0.8)
        allchkbox.click()
        sleep(0.5)
    except:
        break

アーカイブも畳むぞい!

snack.elve.club

アーカイブをリストボックスで表示することにした・・・。

挿れる場所作るの書くの忘れてた
デザインでサイドバーにhtml追加して、その下の方に高度な設定とかあるんでそこに適当な名前をつけてください。(ここではhatena-module-custom-archive)

えーっと、最初の年と月を指定して、今の月までぐるぐる・・・えーっと。
これを詳細設定の「要素にメタデータを追加」に追記

<script>
document.addEventListener('DOMContentLoaded', (event) => {

//開始する年月
var s_y;
s_y=2010;

var s_m;
s_m=5;

var ret;
var ret = '<select><option value="">年月選択</option>';
let d = new Date();

//最初の年
if (s_y<d.getFullYear()){
for ( var m = s_m;  m < 13;  m++) {
ret = ret + '<option value="https://elve.hatenadiary.jp/archive/' + s_y + '/' + m.toString().padStart(2, '0')  + '">' + s_y + '年' + m.toString().padStart(2, '0') + '月</option>' + '\n';
}
}

//ぐるぐる
for ( var y = s_y+1;  y < d.getFullYear();  y++) {
for ( var m = 1;  m < 13;  m++) {

// 繰り返す処理を書く
ret = ret + '<option value="https://elve.hatenadiary.jp/archive/' + y + '/' + m.toString().padStart(2, '0')  + '">' + y + '年' + m.toString().padStart(2, '0') + '月</option>' + '\n';

}
}

//今年
for(var m=1; m<=d.getMonth() + 1;m++){
ret = ret + '<option value="https://elve.hatenadiary.jp/archive/' + d.getFullYear() + '/' + m.toString().padStart(2, '0')  + '">' + d.getFullYear() + '年' + m.toString().padStart(2, '0') + '月</option>' + '\n';
}

//閉じ
ret=ret+'</select>';

//出力
document.querySelector("#box2-inner > div.hatena-module.hatena-module-html.hatena-module-custom-archive > div.hatena-module-body").innerHTML  = ret;
});
</script>

・・・何かもうちょいスマートにできないもんかねぇ(^_^;)

カテゴリが長すぎるからリストボックスにした

安西先生・・・カテゴリが・・・カテゴリが多いです・・・。


というわけでアレコレしたよ!!

設定

詳細設定の要素にメタデータを追加に追加

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(function () {
  $('select').change(function() {
    if ($(this).val() != '') {
      window.location.href = $(this).val();
    }
  });
});
</script>

カテゴリ

まず全カテゴリを表示して<li>タグで囲まれたリスト部分を抽出
<li>と</li>を削除

<a href="https://elve.hatenadiary.jp/archive/category/AI" class="category-AI" vcdaldp-fin="">
AI (17)</a>
<a href="https://elve.hatenadiary.jp/archive/category/Alexa" class="category-Alexa" vcdaldp-fin="">
Alexa (12)</a>

って感じのリストになるので正規表現で一括置換(秀丸

<a href="([^"]+)" [^>]+>\n(.*) \(.*$
↓
<option value="\1">\2</option>

冒頭に

<select>
  <option value="">カテゴリ選択</option>

最後に</select>を追記した

サイドバー

デザイン→カスタマイズ→サイドバー
html追加
上のカテゴリで作ったリストを貼り付け


とりあえず動いてる・・・かな?

WordPressでテンプレート呼ぶと変数消えちゃう


勢いでGoogle Colaboratoryに課金してしまう。

引用元:引きこもっていた - スナックelve 本店

解除忘れてた(´;ω;`) そんなに使わんのにwwwww

さて、人が作ったプログラム動かそうとして苦戦しておったのですが、アホみたいなところで引っかかったのでメモ。

挙動としてはfunction.phpにadd_actiondでheader送信時にコールする関数作って、そこで変数(クラスだけどまぁ略)を追加して、テーマの記事の中でその変数使ってたんすね。
でもあるページでは頑なにエラーを吐き続ける。変数ないない言うのでその記事の中で変数追加したけど当然中身ないのでエラー・・・。
WordPressよくわからんねーとか思いながら眺めてたら、エラーになるページはテンプレートを読み込んでるぞ、と。
あ、コレ単に読み込んだテンプレに変数わたってないだけか? と。
変数のスコープっての? よくわかんねぇwwwww


変数渡すには・・・
get_template_part() – Function | Developer.WordPress.org

お、おう

日本語がありがたい・・・(感謝の涙)
retval.jp

呼ぶときに

get_template_part( 'テンプレートC', null, $x );

ってしておいて

テンプレートCで

$x = $args

で動いた~ヽ(=´▽`=)ノ

いやー気づくと単純な話だけど悩むよね、こういうの(;・∀・)

stable diffusion で遊ぶために・・・


推奨スペックは
メインメモリ16G以上
GPUメモリ12G以上
くらいらしいのね。

父のノートPCをドスパラで買ったからそこで買おうかと検討したら19万~って感じ。CPU Core i7にしたら25万は必要(´;ω;`)
www.dospara.co.jp

CPUでも動くらしいけど好事家のゾーン。

今はColab Pro 1,179円/月
モデルファイル置くのにgoogleDrive60円/月も契約してしまったw
Model関係はダウンロードせずに直接wgetすることで解決。来月には解約できる(60円・・・)
めちゃ時間かかるので使いたいModelだけに絞ること

#コピー
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

#セッションの最初だけ実行
!pip install -U torchvision
!pip install -U TorchAudio
!pip install -U xformers

#googleDriveからモデルファイルコピー(初回のみ)必要なものだけ入れないと重い
#Lora
!mkdir /content/stable-diffusion-webui/models/Lora
%cd /content/stable-diffusion-webui/models/Lora

#SDXL
#Tiny_animal
!wget https://civitai.com/api/download/models/179602 -O Tiny_animal.safetensors
#healing_animal
!wget https://civitai.com/api/download/models/179015 -O healing_animal.safetensors
#SD
#cute_lineart_animal
!wget https://civitai.com/api/download/models/122345 -O cute_lineart_animal.safetensors
#cute_animal
!wget https://civitai.com/api/download/models/122344 -O cute_animal.safetensors

#model
%cd /content/stable-diffusion-webui/models/Stable-diffusion
#mistoonAnime_v20
!wget https://civitai.com/api/download/models/108545 -O mistoonAnime_v20.safetensors
#dreamshaper_8
!wget https://civitai.com/api/download/models/128713 -O dreamshaper_8.safetensors
#beautifulRealistic_
!wget https://civitai.com/api/download/models/177164n -O beautifulRealistic_.safetensors
#sd_xl_base_1.0
!wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors

#VAE
%cd  /content/stable-diffusion-webui/models/VAE
!wget https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors

#実行
%cd /content/stable-diffusion-webui
!python launch.py --share --xformers --enable-insecure-extension-access