‘Web’ タグのついている投稿

Visitorsでログ取りするスクリプトに恥ずかしいバグが・・・

2010年7月4日 スクリプト関連, 雑記

何だか2日に実行し忘れて後日処理を行ったときの月次処理が行われないとか、圧縮ファイルを作るときに含まれているべきファイルが抜けているとか色々恥ずかしい感じのところを修正した。
使い方はこのページにある通り

#!/bin/bash
### kotokoilogs_v3.1
drv () {
    cat access_log${2} >>acl${1}.txt
    visitors -A -m 250 acl${1}.txt >acl${1}.html
}
ext () {
    local rnmMt=`date -d "$(( 2 + ${dag} )) days ago" '+%Y%m'`
    echo ${rnmMt}
    mv acl1.txt acl${rnmMt}.txt
    mv acl1.html ./monthly/acl${rnmMt}.html
    zip -5 acl${rnmMt}.zip acl${rnmMt}.txt ./monthly/acl${rnmMt}.html ./daily/*.*
    rm acl${rnmMt}.txt ./daily/*.*
    cp access_log${2} acl1.txt
}
logs () {
    wget -P "/home/user/dir/logs" "ftp://ID:PASS@domain/../logs/access_log${2}"
    drv 2 ${2}
    local Dt=`date -d "${dag} days ago" '+%d'`
    case "${Dt}" in
        #今日は2日です
        02 ) ext 0 ${2} ;;
        #今日は2日ではありません
        * ) echo "通常処理" ;;
    esac
    drv 1 ${2}
    visitors -A -m 250 access_log${2} >./daily/${ymd}.html
    rm "access_log${2}"
    case "${1}" in
        0 ) echo "完了" ;;
        * ) epiphany ./daily/${ymd}.html acl1.html acl2.html ;;
    esac
}
cd '/home/user/dir/logs'
case "${2}" in
    [1-6] ) dag=${2}
    bkdate=_${2}
    ;;
    * ) dag=0 ;;
esac
ymd=`date -d "${dag} days ago" '+%Y%m%d'`
case "${1}" in
    0 ) logs 1 ${bkdate} ;;
    1 ) epiphany ./daily/${ymd}.html acl1.html acl2.html ;;
    * ) logs 0 ;;
esac
### ${ymd}.html -- 日次
### acl1.html -- 月次
### acl2.html -- 累積

Perlお触り途中経過。まだbashほどエロスは感じない。

2010年5月28日 スクリプト関連, 雑記

とりあえずPerlはここまでやった。
空の配列を作るところでかなり長いことハマってたけども、今日やっと事前に準備するものなんだって事に気が付いて何となく動くぞって程度にはなった感じ。クソ過ぎて涙が出るw
”インデックスを指定して代入!”ってやっただけじゃ配列用意してくれないのね。

一応このコードでgoo.glの短縮URLの取得まではできたので、作業記録も兼ねて置いとく。
テストコードとかそのまんまぺたり。

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use LWP::Simple;

my $q = new CGI;
my $Uname = $q->param(‘namae’);
my $Upss = $q->param(‘pswd’);
my $PushTEXT = $q->param(‘pushtext’);
#httpurlを抽出して配列に格納
my @http = $PushTEXT =~ /s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+/g;
#空の配列を準備
my @gglhttp = ();

print $q->header(-charset=>”utf-8″);

my $data = get “http://ggl-shortener.appspot.com/?url=$http[2]”;
$data =~ s/{“short_url”:”|”}//g;
for( my $i=0 ; $i <= $#http ; $i++ ){
    print $http[$i];
    $gglhttp[$i] = get “http://ggl-shortener.appspot.com/?url=$http[$i]”;
    $gglhttp[$i] =~ s/{“short_url”:”|”}//g;
}

print $q->start_html(-title=>”タイトル”, -BGCOLOR=>’#ffffff’),
    $q->strong(“処理完了!”),
    $q->p(“$Uname”),
    $q->p(“$Upss”),
    $q->p(“$PushTEXT”),
    $q->p(“@http”),
    $q->p(“$#http”),
    $q->p(“$data”),
    $q->p(“@gglhttp”),
    $q->br,
    $q->a({href=>”/”}, “back”),
    $q->br,
    $q->br,
    $q->end_html;
exit;

こんな感じのフォームから中身を投げます。

<form id=”form” action=”posttest.cgi” method=”post”>
    <p>お名前:<input type=”text” name=”namae” /></p>
    <p>PASS:<input type=”password” name=”pswd” /></p>
    <p>TEXT:<textarea name=”pushtext” rows=”4″ cols=”40″>テキストエリア</textarea></p>
    <p><input type=”submit” name=”submit” value=”送信” /></p>
</form>

シェルスクリプトから自動で短縮URL付きのつぶやきをTwitterに投稿。

2010年4月21日 Linux, スクリプト関連, 雑記

行けた行けた。半角スペースの入った引数つけるときは二重引用符じゃダメなのねw
何はともあれ上手く行ったので公開。制限事項は多分前回のものとほとんど変わらずURLの中に「スペース」が混じるとそこで区切られちゃう点。

使い方は簡単でスクリプトの実行時に引数として投稿内容を単引用符(Shift+7 のヤツ)で括ったものを付けて実行するだけ。一応複数のURLでも大丈夫。
URLと本文の切り分けに半角スペースを使っているので、半角スペースを含むURLには前述の通り使えない。

その辺のことは前回の記事を自分で読んだり実際に動かしてみたりして確認してくだしあ。
いま何か頭が働かないんだ。そんなわけで最終成果物。

#!/bin/bash
str=”$1″
#第一引数からURLを雑に抽出し配列へ
array=( `echo “$1” | sed -e ‘s/http/nhttp/g’ -e ‘s/ftp/nftp/g’ -e ‘s/ /n/g’ | grep tp://` )
#配列に含まれる要素の数分処理
for (( i = 0; i < ${#array[*]}; i++ ))
{
  #URLエンコード/配列2へ流し込み
  array2[i]=`echo “${array[i]}” | nkf -eMQ | tr = %`
  #goo.glで配列2のURLを短縮URLに/配列3へ流し込み
  array3[i]=`curl -G “http://ggl-shortener.appspot.com/?url=${array2[i]}” | sed ‘s/”/n/g’ | grep tp://`
  #変数strのURL部分を差し替え
  str=`echo $str | sed “s%${array[i]}%${array3[i]}%”`
}
#文字数を軽く確認してからつぶやく
if [ ${#str} -lt 141 ]
  then
    IPS=`sed -n 1p ~/working/shellscript/ips.list`
    curl -u “$IPS” -d status=”$str” http://twitter.com/statuses/update.xml
  exit 0
else
  echo ‘文字数多いみたい。’
  exit 1
fi

大まかな処理の流れはコメント行の通り。
コメント行読んでどうにかしろっていうのもアレな感じのコードなので、流れだけもうちょっと詳しく書いておく。

まずは1~4行目 変数strに第一引数の中身を代入。次に配列変数arrayにURLを抽出し抽出結果を代入。
5~13行目 for文で配列に含まれる要素の数の分だけ処理。配列変数array2にURLエンコードされたarrayの中身を代入。array2の中身をgoo.glに投げて配列変数array3に結果を代入。変数strのURL部分を差し替えて上書き。
14~23行目 文字数を軽く確認して141文字未満ならつぶやく。そうでないならエラーで終了。

こんな感じ。あ、言うほど面倒くさくなかったね。どうでも良いけどいつも通りインデントが全角なのでそこだけ注意してください。

さ、あとは仕掛かりのリスト生成をこなせば、いつも通りまったり絵を描いて過ごせるよ。

ふぉふぉふぉ、役に立ったならご褒美くらいくださってもよろしくってよ。
ホラこんな所にアマゾンのウィッシュリストが。

GoogleのURL短縮サービスgoo.glを(ry 続き1。

2010年4月19日 Linux, スクリプト関連, 雑記

シェルスクリプトのみで地味に進行中。
ひとまず、文中に含まれるURLっぽい文字列をgoo.glに投げて短縮URLを受け取って文中のURLを置き換える所までできた。
ただ、このままだと、複数のURLが含まれたときに困ったことになってしまうので、そこら辺まだ手を入れていかないといけない。

一応、試してみたい人のために使い方。

スクリプト実行時に引数として二重引用符で囲った文字列をつけて実行する。だけ。
あとはスクリプトが文字列中に含まれるURLっぽい文字列を短縮URLに置き換えてくれる。
ただ、実はこれ制限があってURLの中に「スペース」「()」が混じってると多分うまくいかなかったり、URLの末尾に半角スペースが無いと、本文との切り分けができずにわけ分かんないことになったりする。

「スペース」に関しては原因は明確で、URLと本文の切り分けに使ってるからなんだけども、「()」の方は、エスケープしないと構文エラーになっちゃうからという何とも言えない原因。ここちょっといまいち調べが足りてないので、いまいちはっきりしたことは言えないんだけども、どうしたものかしらと思ってる。

で、これが今の所の暫定コード。
これに、Twitterの投稿スクリプトを組み込めば、URLを自動で短縮URLに加工して投稿してくれるTwitter投稿クライアントが出来る。

#!/bin/bash
str=`echo “$1” | grep tp://[0-9a-zA-Z@”#$%&’*+,-./] `
case “${#str}” in
  0 ) echo ${#str} $str ;;
  * ) echo $str | sed -e ‘s/http/nhttp/g’ -e ‘s/ftp/nftp/g’ -e ‘s/ /n/g’ >test.txt
  str2=`cat test.txt | grep tp://` ;;
esac
curl -G “http://ggl-shortener.appspot.com/?url=”`echo “$str2” | nkf -eMQ | tr = %` | sed ‘s/”/n/g’ | grep http >test2.txt
str3=`cat test2.txt`
echo `cat test.txt | sed “s%$str2%$str3%g”` >test2.txt

処理の流れなんかの説明は一通り形になってからやるつもり。ごちゃついてるけど、そんなに難しいこともやってないし。

GoogleのURL短縮サービスgoo.glをシェルスクリプトから使う。

2010年4月16日 Linux, スクリプト関連, 雑記

やってみたかっただけw
これだけじゃ使い道は無いのでTwitterにからめてもうちょっと拡張してみるつもり。

#!/bin/bash
curl -G “http://ggl-shortener.appspot.com/?url=”`echo “$1” | nkf -eMQ | tr = %` | sed ‘s/”/n/g’ | sed -n ‘/http/p’

何のひねりもないけども、使いようによっては結構便利に使えるかもしれない。

もしかするとnkfコマンドが無い環境もあるかもしれないので入ってなかったらやさしく入れてあげてください。

Twitterの楽しみ方が何となく分かった気がする。

2010年1月28日 雑記

これって、情報発信よりもあちこちフォローしまくって、その先から飛んでくる呟きがコンテンツを勝手に作り上げて行くのを眺めるのが生き物見てるみたいでおもしろいんだ。で、そこには自分の呟きも混じっていると。

うむぅ、何を今更・・・
って、あれ?何で一日中ブログ更新してんだろう。

冬のガリレオ、遠距離タマゴ発射装置と聞いて

2010年1月24日 雑記

すぐ分かる人がどれだけいるかは分からないけども、
ついさっき久しぶりに、まだやってるかなと思って探してみたんだよ。

そしたらこんなのみっけた。

中央改札
http://www.metro-ink.com/universe/

現在、新しい海にfyopueとして参加中。
遠距離タマゴ発射装置もまだ稼働中らしい。もう5年も前のなんだね。
レトロインクは相変わらず素敵。

個人的には仕事をするならこういうのをメインにやりたい。

いや、やりたいじゃなくてやれば良いのかな。
そろそろ28になるし専門教育とかも受けてないけど、今からでもできるかな。