‘ついった’ タグのついている投稿

引数を片っ端から配列に流し込んでみる。

2010年6月18日 スクリプト関連, 雑記

作業中のを部分的に切り出してみた。
こんな感じでどうかな。

#!/bin/bash
keyval () {
    i=${#kv[*]}
    kv[${i}]=”${1}=${2}”
}
keyval “oauth_consumer_key” “${consumer_key}”
keyval “oauth_nonce” “${oauth_nonce}”
keyval “oauth_signature_method” “HMAC-SHA1”
keyval “oauth_timestamp” “${oauth_timestamp}”
keyval “oauth_version” “1.0”
keyval “x_auth_mode” “client_auth”
keyval “x_auth_password” “${pss}”
keyval “x_auth_username” “${usr}”
data=`echo ${kv[*]} | sed ‘s/ /&/g’`

さっきまでにやったこと。自分用

2010年5月17日 雑記

何となくメモ。

Kindle 2 PDF書き出し用のOpenOffice.orgテンプレート上げた。
DL – http://templates.services.openoffice.org/ja/node/3983

Twitter appでConsumer keyとConsumer secret発行してもらった。
あとはxAuthの利用申請。早めにやっつけろ。忘れる前に。

落描きした。2日に分けて描いたらグダグダに。

ひとまず、こんな感じ。素で忘れるので。

シェルスクリプトから自動で短縮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文字未満ならつぶやく。そうでないならエラーで終了。

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

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

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

シェルスクリプトでTwi(ry — prompter関数の中身。

2010年2月20日 Linux, スクリプト関連, 雑記

昨日の続き。昨日の記事では実体参照にするべき文字をサラッと生で書いてて一部消えてたので、その辺の訂正も兼ねて。
昨日のはココ。既に修正済。【シェルスクリプトでTwitterに投稿。リストで台詞生成編】

もう如何に面倒臭くなく実装するかしか考えてない感じなのでサラッと説明終わらせちゃう。
このスクリプトの肝はスクリプトその物ではなくスクリプトから参照されるリストの方なので、スクリプト側ではそう難しいことはやっていません。

そんなわけで昨日も貼ったけどもスクリプト。今日は一部だけ。

#台詞生成関数
prompter () {
  count=1
  #10分毎にリストを切り替え
  case “$mt” in
    0* ) mt=00 ;;
    1* ) mt=10 ;;
    2* ) mt=20 ;;
    3* ) mt=30 ;;
    4* ) mt=40 ;;
    5* ) mt=50 ;;
  esac
  for (( i = 0; i < 4; i++ ))
  {
    #テキスト行数取得
    ttnum=`wc -l </home/user/dir/$hr/$mt/$count.txt`
    #1行抽出・配列格納
    prpt[i]=`sed -n $((($RANDOM % $ttnum) + 1))p /home/user/dir/$hr/$mt/$count.txt`
    count=$((count + 1))
  }
  for (( i = 0; i < ${#prpt[*]}; i++ ))
  {
    #テキスト生成
    fprpt=”$fprpt””${prpt[i]}”
  }
  IPS=`sed -n $1p /home/user/dir/ips.list`
  curl -u $IPS -d status=”$fprpt” http://twitter.com/statuses/update.xml
}

昨日はprompter関数を呼ぶまでの流れをやったので今日はprompter関数の処理内容を軽く。

1行目 変数countに1を代入。
3〜8行目 caseで変数mtの値を評価して、値を丸めるて変数mtに代入。
9〜16行目 変数ttnumにwcコマンドで/home/user/dir/$hr/$mt/$count.txtの行数を代入。
配列変数prpt[i]にsed -n $((($RANDOM % $ttnum) + 1))pで/home/user/dir/$hr/$mt/$count.txtの指定行を代入。変数countに1追加。これらをfor文で4回ループ。
17〜21行目 これは簡単。変数fprptに変数fprptと配列変数prpt[i]を展開しながら代入。これ一行でできたりしないのかしら?

あとは、この前書いた【シェルスクリプトでTwitterに投稿。】にある2行のスクリプトでTwitterに投稿される。と言う流れ。

ダラダラと書いてきましたがこんな感じです。ホントに軽く。だって、読んでる人が何を知らないかを知らないし。そもそも読んでる人がいるのかも知らないし。

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

シェルスクリプトでTwitterに投稿。リストで台詞生成編

2010年2月20日 Linux, スクリプト関連, 雑記

botです。もうそのまんま。

こういうのはあんまり出しちゃいけない気もするけども出しちゃう。なぜなら汎用性が薄いから。
このスクリプトの動作サンプルはココ。フォローしてあげてください。話しかけても学習しない上にテスト中だから、ちょいちょいつぶやき消えたりしますがw

そんなわけで、スクリプト。

#!/bin/bash

#台詞生成関数
prompter () {
  count=1
  #10分毎にリストを切り替え
  case “$mt” in
    0* ) mt=00 ;;
    1* ) mt=10 ;;
    2* ) mt=20 ;;
    3* ) mt=30 ;;
    4* ) mt=40 ;;
    5* ) mt=50 ;;
  esac
  for (( i = 0; i < 4; i++ ))
  {
    #テキスト行数取得
    ttnum=`wc -l </home/user/dir/$hr/$mt/$count.txt`
    #1行抽出・配列格納
    prpt[i]=`sed -n $((($RANDOM % $ttnum) + 1))p /home/user/dir/$hr/$mt/$count.txt`
    count=$((count + 1))
  }
  for (( i = 0; i < ${#prpt[*]}; i++ ))
  {
    #テキスト生成
    fprpt=”$fprpt””${prpt[i]}”
  }
  IPS=`sed -n $1p /home/user/dir/ips.list`
  curl -u $IPS -d status=”$fprpt” http://twitter.com/statuses/update.xml
}

#時・分変数
hr=`date ‘+%H’`
mt=`date ‘+%M’`
wkd=`date ‘+%w’`

#曜日チェック
case “$wkd” in
  [1-5] ) echo “平日” ;;
  * ) hr=”h”$hr ;;
esac
#特定時間帯チェック
case “$hr” in
  h0[2-5] | h1[0-3] | h1[7-9] ) ck=1 ;;
  0[2-5] | 1[0-3] | 1[7-9] ) ck=1 ;;
  * ) ck=0 ;;
esac

#実行部
#特定時間帯チェックがオン(1)なら投稿回数半減
if [ $ck -eq 1 ]
then
  case “$mt” in
    ?[0-4] ) prompter 1 ;;
    ?[5-9] ) echo “1回休み” ;;
  esac
else
  prompter 1
  exit 1
fi

prompter関数は最終実行部分なのでまずは無視してください。

とりあえず、処理の流れを軽く説明すると、

スクリプト実行で、まず最初に時・分・曜日をそれぞれhr、mt、wkd変数に格納。
次に変数wkdに格納された数値をcaseで評価、平日と土日を振り分け。

※平日の振り分けがecho “平日”となっていますが、これはテスト段階でそうしていたものを放置しているだけです。cronで実行した場合、画面には何も反応は帰ってこないので。

で、ここで振り分け結果が土日(0か6)だった場合、変数hrに格納された数値の頭にホリデイのhを一文字追加。
次に特定時間帯チェックで変数hrに格納された数値・文字列を評価。変数ckに0か1を格納。
if文で変数ckを評価、真ならcaseで変数mtを評価し変数mtに格納された数値の末尾が0〜4ならprompter関数を引数1で実行。
偽ならprompter関数を引数1で実行。

これで後はprompter関数が適当に乱数を使ってつぶやいてくれます。

ちょっと今回は説明ここまでにしときます。取り急ぎリストに修正入れないといけないので。
次回はprompter関数がなにやってるのか説明します。説明無くても大体分かると思いますが。

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