JURIA @Wiki
@あれこれ-2009年12月
最終更新:
juria
-
view
@あれこれ-2009年12月 |
[2009-12-18]
nkf じゃなくても &bookmark_hatena(show=none)
[2009-12-15] のヤツ、
nkf
使わなくてもAutoHotkeyのTransformコマンドでいけますね。
内の環境では、 wget や cUrl 走らせる前に少し時間を置かないとうまくいかないけど。
クリップボード使うので、退避・書き戻しとか要るかな。
内の環境では、 wget や cUrl 走らせる前に少し時間を置かないとうまくいかないけど。
クリップボード使うので、退避・書き戻しとか要るかな。
inStr = %tweet% Clipboard = %inStr% TransForm, tweet, Unicode
変換精度はどっちでも同じぐらいで、スペースの入れ方とかでも変わってくるので、
たぶん、 nkf ならオプションを工夫するとか、NkfConvertSafe 使うとかすれば、もっと
精度は良くなるんじゃないかと。
たぶん、 nkf ならオプションを工夫するとか、NkfConvertSafe 使うとかすれば、もっと
精度は良くなるんじゃないかと。
ちなみに、
AutoHotkey Unicode 版
なら、mbstring.ahk を使わなくても
StringLen コマンドでワイドキャラクターの文字数をちゃんとカウントしてくれますが、
TransForm, OutputVar, Unicode の代替である
StringLen コマンドでワイドキャラクターの文字数をちゃんとカウントしてくれますが、
TransForm, OutputVar, Unicode の代替である
Transform, OutputVar, To[From]CodePage, codepage, StringToConvert
がうまく行かないんだよね。。。
[2009-12-15]
こういう時こそ nkf &bookmark_hatena(show=none)
[2009-12-09] の「"\デスクトップ\"みたいな日本語のパス。utf-8 で出力できたら」
って、うっかりしてましたね。
nkf があるじゃないですか。( nkf.exe nkf32.dll Windows用 最新版 )
sqlite3 の出力を nkf にパイプ、 nkf のオプションで出力コードに Shift_JIS を指定。
って、うっかりしてましたね。
nkf があるじゃないですか。( nkf.exe nkf32.dll Windows用 最新版 )
sqlite3 の出力を nkf にパイプ、 nkf のオプションで出力コードに Shift_JIS を指定。
(一行で)
sqlite3 -line History "select id, full_path , url from downloads" | nkf -s > output.txt
Shift_JIS 専用 nkf32.exe なら
sqlite3 -line History "select id, full_path , url from downloads" | nkf32 > output.txt
[2009-12-02] の
wget
や
cUrl
で Twitter API 使って POST も
nkf32.dll
を DllCall
で日本語行けますね。日本語(Shift_JIS)の文字数カウントは、なまずさんの
mbstring.ahk を使わせて頂いてます。
で日本語行けますね。日本語(Shift_JIS)の文字数カウントは、なまずさんの
mbstring.ahk を使わせて頂いてます。
twitterPost.ahk 日本語対応版
#Include mbstring.ahk update: InputBox, tweet, Twitter, , ,640 ,110, , , , ,%tweet% If ErrorLevel <> 0 Exit else ;StringLen, length, tweet の代わり length := MBS_Strlen(tweet) count := length-140 If (count > 0) { MsgBox, ,2,%length%`n%count%文字オーバー Gosub, update } else { MsgBox, %length%文字`n%tweet% inStr = %tweet% ; nkf32.dll をロード hModule := DllCall("LoadLibrary", Str, "nkf32.dll") ; Shift_JIS を utf-8 に変換 DllCall("nkf32.dll\SetNkfOption", "Str", "-Sw") DllCall("nkf32.dll\NkfConvert", "Str", tweet, "Str", inStr) ;開放する DllCall("FreeLibrary", UInt, hModule) Run, wget.exe --post-data="status=%tweet%" -O- 以下略 ;Run, curl.exe -d "status=%tweet%" 以下略 } Return
[2009-12-09]
SQLite に挑戦 &bookmark_hatena(show=none)
何をどこから DL したのか、どこに保存したのか、ブラウザのダウンロード履歴は
けっこう役に立つ。
Portable Google Chrome のダウンロード履歴は \Profil\Default\History ファイルに
保存されている。SQLite3 のデータベースファイルなので、 TkSQLite や PupSQLite で
簡単に抽出、テキストにしておけるけど、コマンドラインで何とかしようと思い立ち。
SQL の何たるかを知らないエンドユーザは悪戦苦闘してしまいました。
(以下、自分なりの理解で書いてるので、用語は適切じゃないかもしれません。)
sqlite3.exe は、PortableChromium v.4.0.212.0 に VACUUM 用バッチファイルと共に
同梱されてたりもするけど、現時点で最新の sqlite3.exe v3.6.21(Precompiled Binaries For Windows) を使用。
sqlite3.exe は、対話型、シェル・スクリプト、両方の利用が可能。SQLコマンドは共通。
けっこう役に立つ。
Portable Google Chrome のダウンロード履歴は \Profil\Default\History ファイルに
保存されている。SQLite3 のデータベースファイルなので、 TkSQLite や PupSQLite で
簡単に抽出、テキストにしておけるけど、コマンドラインで何とかしようと思い立ち。
SQL の何たるかを知らないエンドユーザは悪戦苦闘してしまいました。
(以下、自分なりの理解で書いてるので、用語は適切じゃないかもしれません。)
sqlite3.exe は、PortableChromium v.4.0.212.0 に VACUUM 用バッチファイルと共に
同梱されてたりもするけど、現時点で最新の sqlite3.exe v3.6.21(Precompiled Binaries For Windows) を使用。
sqlite3.exe は、対話型、シェル・スクリプト、両方の利用が可能。SQLコマンドは共通。
■対話型
コマンドプロンプトで、引数に Historyファイルを指定して sqlite3.exe を起動すると
コマンドプロンプトで、引数に Historyファイルを指定して sqlite3.exe を起動すると
sqlite3.exe path\to\Profil\Default\History
SQLite データベースとの対話がスタート、コマンドの入力待ちになる。
SQLite version 3.6.21 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
続けて、(念のために)ダウンロード履歴データを格納している Table 名や
カラム名を確認 → 出力モードを指定 → 出力ファイル名を設定 → 抽出するデータを
指定して出力、と流れに従って逐一 SQLコマンドを入力、ENTER する。対話型たる所以。
-- で始まる行はコメントだけど、もちろん入力する必要は無い。(画像参照)
カラム名を確認 → 出力モードを指定 → 出力ファイル名を設定 → 抽出するデータを
指定して出力、と流れに従って逐一 SQLコマンドを入力、ENTER する。対話型たる所以。
-- で始まる行はコメントだけど、もちろん入力する必要は無い。(画像参照)
sqlite> -- テーブル名を表示させて確認(#1) sqlite > .tables downloads presentation urls keyword_search_terms segment_usage visits sqlite> -- テーブル名を指定してフィールド内のカラム名を確認(#1) sqlite> .schema downloads CREATE TABLE downloads (id INTEGER PRIMARY KEY,full_path (以下略); sqlite> -- 出力モード(#2)、出力ファイル名を設定 sqlite> .mode line sqlite> .output DL.txt sqlite> -- downloads テーブルからカラムを3列指定してデータを出力(#3) sqlite> -- 命令文の最後には必ず ; を付ける(終了の宣言) sqlite> select id, full_path , url from downloads; sqlite> -- .q(.quit) または .e(.exit) で終了、通常のコマンドプロンプトに sqlite> .exit
#1 全てのテーブル名、インデックス名、各フィールドをまとめて確認するなら
sqlite> .schema
#2 見やすいのは line モード、再利用しやすいのは csv モードでしょうか。
#3 カラム名をひとつ指定する場合
sqlite> select url from downloads;
指定テーブル内の全データを抽出する場合
sqlite> select * from downloads;
■shell script(コマンドプロンプト)で実行する場合
sqlite3.exe [OPTIONS] FILENAME [SQLコマンド]
起動オプションは、 sqlite3.exe -help で確認。
テーブル名を指定してフィールド内のカラム名を確認
sqlite3.exe History ".schema downloads"
downloads テーブルからカラムを3列指定してデータをテキストファイルに出力(一行で)
sqlite3.exe -line History "select id, full_path , url from downloads" > DL.txt
SQL コマンド中にスペースがある場合はダブルクォーテーション(")で囲む。
という訳で、前置きが長くなりましたが、定期的にダウンロード履歴をテキストに保存、
Chrome の履歴は削除するとスッキリ!
Chrome の履歴は削除するとスッキリ!
ChromeDLHistory2txt.ahk
SQL コマンド中のカンマ(,)はエスケープすること。
SQL コマンド中のカンマ(,)はエスケープすること。
;History ファイルがある場所 datadir = path\to\Profil\Default History = %datadir%\History ;バックアップファイルやテキストファイルの保存場所 bkpdir = %datadir%\backup ;タイムスタンプの書式(ファイル名に付ける為) FormatTime, date, , yyyyMMdd ;バックアップ FileCopy, %History%, %bkpdir%\History.bak, 1 ;同名上書き ;データを抽出してテキストファイルに保存(一行で) Runwait, cmd /c sqlite3.exe -line %History% "select id `, full_path `, url from downloads" > %bkpdir%\downloads_%date%.txt,,HIDE ;データベースからダウンロード履歴を削除 Run, cmd /c sqlite3.exe %History% "DELETE FROM downloads",,HIDE ExitApp
REINDEX(index の再構築)や VACUUM(データベースファイルの最適化)をしてもいいかも。
問題は、"\デスクトップ\"みたいな日本語のパス。utf-8 で出力できたらいいんだけど。
問題は、"\デスクトップ\"みたいな日本語のパス。utf-8 で出力できたらいいんだけど。
[2009-12-02]
めんどくさがりやの Twitter &bookmark_hatena(show=none)
新たに専用クライアントソフトを導入する必要があるような使い方はしないので。
Twitter Auto Login フォーム
twitter.html
表示の都合により一部改行
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis" /> <meta http-equiv="content-script-type" content="text/javascript" /> <title>Twitter - 自動ログイン</title> </head> <body onload="document.autologon.submit()"> <h3>twitter:ログイン</h3> <form action="https://twitter.com/sessions" name="autologon" method="post"> <input name="session[username_or_email]" type="text" value="ユーザ名とか" /> <input name="session[password]" type="password" value="パスワード" /> </form> </body> </html>
twitter-mode on xyzzy
丁寧な readme が付いてますが、一応、手動導入方法。
1.~/site-lisp に以下をコピー
twitter-mode 一式(twitter フォルダ)
junk-library 一式(junk フォルダ)
xml-parser-modoki.l
json 一式(json.l・json フォルダ)
twitter-mode 一式(twitter フォルダ)
junk-library 一式(junk フォルダ)
xml-parser-modoki.l
json 一式(json.l・json フォルダ)
2..xyzzy または siteinit.l に
(autoload 'twitter "twitter/defs" t) (autoload 'twitter-toggle "twitter/defs" t)
3.M-x twitter で起動、ミニバッファにユーザ名とパスワードを入力→[ENTER]
ログイン成功を確認したら、一旦 [q] で終了させる。
ログイン成功を確認したら、一旦 [q] で終了させる。
4.~/ 以下に .twitter フォルダが作成されているので、/twitter/config.l.sample を
コピー、config.l にリネーム、アカウントや配色などの設定をする。(任意)
ブラウザをデフォルト以外のブラウザを指定するなら
コピー、config.l にリネーム、アカウントや配色などの設定をする。(任意)
ブラウザをデフォルト以外のブラウザを指定するなら
;;; ブラウザを指定する (defun open-web (url) (let ((prog "path/to/xyzzy/etc/PortableChrome.lnk")) (shell-execute prog t url)))
ショートカットファイルについては@あれこれ-2009年11月を参照
複数のアカウントを使い分けるなら、アカウントの設定はしない、ってことですね。
wget で Twitter API 使って post できる そうなので(日本語不可)
inputbox で投稿用 AHK。
cURL
でもおっけ。140 文字超えてたら何度でもやり直し可。
ASCII のみなので文字数カウントも単純(バイト単位)。DOS窓非表示。
ASCII のみなので文字数カウントも単純(バイト単位)。DOS窓非表示。
twitterPost.ahk
表示の都合により一部改行
update: InputBox, tweet, Twitter, , ,640 ,110, , , , ,%tweet% If ErrorLevel <> 0 Exit else StringLen, length, tweet count := length-140 If (count > 0) { MsgBox, ,2,%length%`n%count%文字オーバー Gosub, update } else { MsgBox, %length%文字`n%tweet% Run, wget.exe --post-data="status=%tweet%" -O- http://ユーザ名:パスワード@twitter.com/statuses/update.json ,,HIDE ;Run, curl.exe -d "status=%tweet%" http://ユーザ名:パスワード@twitter.com/statuses/update.json ,,HIDE }
-