November 30, 2016

在Obj-C專案中使用Swift CocoaPod Library

在時代從Obj-C到Swift的過渡期,某些時候我們就是可能需要在專案中引用到Swift的Library。Apple也非常好心的準備了一切,只不過有時候就是沒那麼完美。

官方文件:
Swift and Objective-C in the Same Project

在使用一個SideMenu pod的時候遭遇兩個問題:

1. 出現錯誤:“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.

解法是在PodFile中加入以下
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.0'
end
end
end


參考網址:http://stackoverflow.com/questions/38446097/xcode-8-beta-3-use-legacy-swift-issue/38466703#38466703


在整合時遇到第二個問題:
找不到 menuAddScreenEdgePanGesturesToPresent 將無法正確設定螢幕邊緣的PanGesture。
所幸最後在issue中找到解法: https://github.com/jonkykong/SideMenu/pull/82

原來某些swift語法無法正確被轉換為objC的語法,以至於產生的 xxx-swift.h 內容不完全。根據該pull request可以修正ScreenEdgePanGesture的問題,不過另一個menuBlurEffectStyle則得自行修改了。

November 18, 2016

ptt 爬蟲 with Python

即便經過十幾年,世界早已從無名小站經過Facebook,正演進到通訊軟體與chat bot的世界。台大批踢踢仍是台灣網路世界的熱門中樞,什麼最新最快最即時的資訊哪裡找不到,還是到批踢踢問鄉民最快。因應新的世界,也有好多好用的批踢踢手機app可以使用,滿足大家對資訊的需求。

好吧,廢話講太多(下略三千字)。今天要玩的是批踢踢的文章爬蟲。

Github上相關的程式碼很多,根據Readme挑了一個看起來合適的切入點。 https://github.com/jwlin/ptt-web-crawler 嗯,是Python。

在目前的Mac版本(10.12)已有內建Python2.7。直接跑起來卻一直出現error。胡亂安裝一陣相關套件,卻還是一直回報pyOpenssl相關錯誤。才知道原來在本機跑python還需要設定Virtual Environment才行。

根據說明,virtual environment是用來保持各專案的獨立性。解決了A專案需要版本 1.x 但 B專案需要 4.x 的這類問題。

可透過pip安裝。
$ pip install virtualenv


基本使用:
1. 在專案資料夾中建立virtual environment
$ cd my_project_folder
$ virtualenv venv

以上動作會在該資料夾中建立一個 venv 的資料夾。裡面會放Python的相關執行檔與一份用來安裝其他library的pip library。(venv也可使用其他名稱)(這資料夾在mac finder中看不到,是隱藏資料夾。)
也可以指定python interpreter
$ virtualenv -p /usr/bin/python2.7 venv

2. 使用以下指令啟動virtual env
$ source venv/bin/activate

當virtual env啟動時,會出現在提示符號右邊如:
(venv)Your-Computer:your_project UserName$

啟動後,任何使用pip安裝的套件會裝在venv中。
$ pip install requests

3. 如要關閉virtual environment
$ deactivate


接下來就可以開始玩囉~

基本上照說明執行就可以動了。以下依需求fork到我的Github上做了一點小修改。

原本設定參數 -i [起始頁] [終止頁] ,終止頁若設-1代表爬到最後。
不過因為我只需要爬最新幾頁,所以修改參數,若起始頁設定-1,則會往前數n頁再爬出來,參數這樣設 -i -1 n,就會爬該版的最後n頁文章內容。

目前大概這樣,有興趣的朋友可以到Github下載下來玩。