コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

http命令について byスマートフォン勉強会@関西#14で話をしました (4)


http命令は、http.addHeader( ヘッダ名, 内容 )、http.get( URL, 取得ファイル名 )、http.status()の3つです。これらの命令でヘッダのセット、ファイルの取得、取得状態チェックを行います。
http命令によるファイルの取得処理は、luaプログラムから独立しているので、http.status()を使って処理が終わったかどうかを確認する必要があります。http.status()が返す内容は図のように8通りあり、1が返ってくると取得に成功しています。
下記に、すまべんで使用したデモプログラムを書いておきます。詳しくは、ここのブログで説明しています。

------------------------------------------
--画像取得サンプル
------------------------------------------
--関数宣言--------------------------------
main={}          --mainメソッド
initPicture={}   --ワークエリアに画像を読み込みます
getNextTime={}   --今の時間から次の時分を求めます
jiwajiwaDisp={}  --画像をじわじわ表示する
getPicture={}    --指定時刻の画像を読み込む
printscrl={}     --スクロールするテキスト表示

--グローバル変数宣言----------------------
Gwide, Gheight = canvas.getviewSize()  --画面サイズ取得
PicName = "/picture.jpg"

LuaridaPath=system.getCardMnt().."/luarida"   --luaファイルを保存しているPath
------------------------------------------
mt={}
mt.__newindex=function(mtt,mtn,mtv)
 dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 )
 toast("画面タッチで実行を続けます", 1)
 touch(3)
end
mt.__index=function(mtt,mtn)
 dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 )
 toast("画面タッチで実行を続けます", 1)
 touch(3)
end
setmetatable(_G,mt)
--------以下が実プログラム----------------
------------------------------------------
--スクロールするテキスト表示
------------------------------------------
function printscrl( str, fontsize, fcolor, bcolor )
local sc
 --一度、見えないところにテキストを書いて、改行数を求める
 sc = canvas.drawTextBox( str, 0, Gheight+1, fontsize, fcolor, Gwide )
 --画面の絵をワークエリアに取り込みます
 canvas.getg( 0, fontsize*sc, Gwide-1, Gheight-1, 0, fontsize*sc, Gwide-1, Gheight-1 )
 --取り込んだ画面をスクロールさせて描きます
 canvas.putg( 0, 0, Gwide-1, Gheight-fontsize*sc-1, 0, fontsize*sc, Gwide-1, Gheight-1 )
 --書き出す部分をバックカラーで塗り潰します
 canvas.drawRect(  0, Gheight-fontsize*sc-1, Gwide, Gheight, bcolor, 1 )
 --スクロールしたところにテキストを書きます
 canvas.drawTextBox( str, 0, Gheight-fontsize*sc, fontsize, fcolor, Gwide )
end
------------------------------------------
--指定時刻の画像を読み込む
------------------------------------------
function getPicture( tm )
local url = "http://www.bijint.com/jp/img/clk/"..tm..".jpg"
 http.addHeader( "Referer" , "http://www.bijint.com/" )
 http.get( url, LuaridaPath..PicName )
end
------------------------------------------
--画像をじわじわ表示する
------------------------------------------
function jiwajiwaDisp()
local i
 for i=0,255,8 do
   canvas.drawCls( color(255,255,255,i) )
 end
 for i=255,0,-8 do
   canvas.putg( 0,0,Gwide-1,Gheight-1, 0,0,Gwide-1,Gheight-1 )
   canvas.drawCls( color(255,255,255,i) )
 end
 canvas.putg( 0,0,Gwide-1,Gheight-1, 0,0,Gwide-1,Gheight-1 )
 canvas.putflush()
end
------------------------------------------
--今の時間から次の時分を求めます
------------------------------------------
function getNextTime()
local hm = os.date("%H%M")
local h = tonumber(string.sub( hm, 1, 2 ))
local m = tonumber(string.sub( hm, 3, 4 ))
local tm = ""
 m = m + 1
 if( m>59 )then
   m = 0
   h = h + 1
   if( h>59 )then h = 0 end
 end
 if( h<10 )then tm = "0"..tostring(h) else tm = tostring(h) end
 if( m<10 )then tm = tm.."0"..tostring(m) else tm = tm..tostring(m) end
 return tm
end
------------------------------------------
-- ワークエリアに画像を読み込みます
------------------------------------------
function initPicture()
local filename
local wide,height
local bwide, bheight
local rx, ry

 --ワークエリア画面をクリアします
 canvas.workCls(color(0,0,0))
 filename = LuaridaPath..PicName
 --サイズの取得
 wide, height = canvas.getBmpSize( filename )

 if( height*Gwide/wide>Gheight )then
   bwide = wide*Gheight/height
   bheight = Gheight
   rx = (Gwide - bwide)/2
   ry = 0
 else
   bwide = Gwide
   bheight = height*Gwide/wide
   rx = 0
   ry = (Gheight-bheight)/2
 end
 --local str = Gwide.." "..Gheight.." "..wide.." "..height
 --local str = bwide.." "..bheight
 --printscrl( str, 30, color(0,0,0), color(255,255,255) )
 --touch(3)

 if( canvas.loadBmp( filename, rx, ry, rx+bwide-1, ry+bheight-1 )==-1)then return -1 end
 --if( canvas.loadBmp( filename, 0, -23, Gwide-1, 342 )==-1)then return -1 end
 return 0
end
------------------------------------------
--メインプログラム
------------------------------------------
function main()
local i
local sta
 --メイン画面サイズを設定する
 canvas.setMainBmp( Gwide, Gheight )	--メイン画面のサイズ設定
 canvas.setWorkBmp( Gwide, Gheight )	--ワークエリアも一緒のサイズにする

 --画面を黒くする
 canvas.drawCls( color(0,0,0) )

 --今の時刻の画像を読み込む
 getPicture( os.date("%H%M") )
 --少し待つ
 for i=0,5000 do
   sta = http.status()
   if( sta~=0 )then break end
 end

 if( sta==1 )then
   --読み込み成功
   if( initPicture()==0 )then
     jiwajiwaDisp()		--画像をじわじわ表示する
   end
 end
 --読み込みに失敗したら諦める

 local tmg = os.date("%H%M")	--今の時間を取得する
 sta = 2
 while( true )do
   if( sta>1 )then
     --canvas.drawText( os.date("%S").." "..sta, 0,0,30,color(255,255,255), color(0,0,0) )
     --次の画像を取得する
     getPicture( getNextTime() )
   end
   sta = http.status()  --http取得statusを読み込む(読み込み中=0,正常終了=1)

   if( tmg~=os.date("%H%M") )then
     --時間が変ったときは画像を切り替える
     if( initPicture()==0 )then
       jiwajiwaDisp()             --画像をじわじわ表示する
       --picgetFlg = 0            --読み込み成功フラグを0にする
       tmg = os.date("%H%M")      --今の時間を再設定する
       sta = 2
     end
   end

   local x,y,s = touch()
   if( s~=1 )then
     s = dialog( "美人時計" , "終了しますか?", 2 )
     if( s==1 )then break end
   end
 end
end
main()
system.exit()

以上です。