2015-04-28 46 views
1

我正在嘗試使用LiveCode爲iOS創建天氣應用程序,它將使用將以Json格式提供信息的天氣API。但我怎麼能意識到這一點?如何在Livecode中使用API​​和解碼json

例如,API將提供一個鏈接

http://m.weather.com.cn/data/101110101.html 

(101110101是城市代碼,它可以通過不同的代碼替換成收集不同的天氣信息)

如果你去上面的鏈接,它會以json格式提供相應城市的天氣信息。

如何收集信息並將其放入相應的字段?而且由於天氣api爲不同城市提供了不同的代碼,我如何才能實現我可以在某個字段中輸入城市名稱的功能,然後單擊一個按鈕,該應用程序將收集天氣信息?

以下是一些您可以嘗試的城市代碼,儘管它們是中文的:D。城市的名稱可以使用不同的語言,我只需要它可以將名稱翻譯爲相應的代碼。

101010100=北京 
101010200=海淀 
101010300=朝陽 
101010400=順義 
101010500=懷柔 
101010600=通州 
101010700=昌平 
101010800=延慶 
101010900=豐臺 
101011000=石景山 
101011100=大興 
101011200=房山 
101011300=密雲 
101011400=門頭溝 
101011500=平谷 
101011600=八達嶺 
101011700=佛爺頂 
101011800=湯河口 
101011900=密雲上甸子 
101012000=齋堂 
101012100=霞雲嶺 

回答

1

這是LiveCode 7或更高版本(Unicode文本的處理是不同的,在早期版本不太可靠。)

比方說,你保存你的城市代碼在UTF8文本文件,城市。文本。讀入文本文件,並將其轉換爲UTF-16,LiveCode的本地文本編碼。我已將文本文件存儲在桌面上,但顯然只要您可以導出文件的路徑,就可以將其存儲在任何位置。

在有一個按鈕,文本字段「城市」一卡FLD「weatherdata」,我寫了下面的處理程序按鈕:

on mouseUp 
    put the text of fld "city" into tCityName 
    put specialFolderPath("desktop") & "/cities.txt" into tFilePath 
    put URL ("binfile:" & tFilePath) into tCityList # read file as binary data 
    put textDecode(tCityList,"UTF8") into tCityList # convert to UTF16 
    put lineOffset("=" & tCityName & cr,tCityList & cr) into tFoundLine 
    set the itemDelimiter to "=" 
    put item 1 of line tFoundLine of tCityList into tCityCode 

    # now call the weather API 
    put "http://m.weather.com.cn/data/" & tCityCode & ".html" into tURL 
    put URL tURL into tRawJSON 
    put textDecode(tRawJSON,"UTF8") into fld "weather data" 
end mouseUp 

現在,所有剩下的就是通過JSON解析。有幾個JSON庫可用於LiveCode。但這是一個不同的問題。

+0

非常感謝您的回答。這有很大幫助,但是我怎樣才能將JSON庫添加到LiveCode並使用它來解析我的鏈接?我嘗試了你所說的,當我點擊按鈕時,tRawJSON出現在weatherData字段中,它看起來應該是什麼樣子? –

+0

添加堆棧庫非常簡單。例如,在上面的回答中,按照Monte的鏈接EasyJSON。然後在你的堆棧中使用命令:'library stack /path/to/stackfile.livecode'。這會將庫堆棧腳本中的所有處理程序添加到堆棧的消息路徑中。完成之後,只需按照EasyJSON庫附帶的說明中所述使用庫中的函數即可。 – Devin

+0

嗨,我做了一切,但他們仍然出現同樣的事情。你可以看看嗎?https://www.dropbox.com/s/9dbttvmbg0e4v9m/WeahterApp.zip?dl = 0 –

0

由於Devin提到有幾個JSON庫可用。事實上,如果您正在試驗LC 8,那麼彼得佈雷特今天發佈了一個用LiveCode Bulder編寫的程序here

EasyJSON是用LC腳本編寫的,應該可以在大多數版本的LC上工作。它可用here

我使用我的外部mergJSON,這是目前LiveCode最快的JSON解析器。它的雙重許可,可在GitHub上here和內置的版本從我的網站here

在任何情況下,你會希望將JSON解析到LiveCode陣列和任何文本你需要顯示你需要textDecode在德文的例子。