code

2016年4月14日 星期四

如何取得Facebook文章情緒(讚,大心,哈哈) - facebook graph api reactions

Reactions coming!
昨晚FB大拜拜結束後,如原先預期 Facebook Graph API 推出 2.6。 最令人期待的就是feed reactions(文章情緒),在2016年初推出reactions後, 就備受關切,Graph API會不會提供reactions資訊,Facebook有暗示在大拜拜 結束後會公布。
果然,現在我們可以在feed及photos等欄位中,找到 reactions 選項
reactions
同樣也在預期範圍內,情緒符號並沒有像讚,有專屬的欄位,而是以屬性的方式存在。 不難想像,這樣子的設計會比較容易將來『新的情緒符號』加入。
reactions data
最後附上 reactions 對照表,大伙進攻囉!

Reactions 對照表

LIKELOVEHAHAWOWSADANGRY
大心
LIKELOVEHAHAWOWSADANGRY

2016年4月11日 星期一

Java 網路資料爬蟲包(一) - 關於爬蟲包

Java 網路資料爬蟲包 GitHub: https://github.com/abola/CrawlerPack
Maven Central

關於爬蟲包

在Java上開發爬蟲並不困難,最常見的套件便是Jsoup。 然而Jsoup仍有許多問題。例如無法取得 http/https 以外協定的 資源、無法使用中文XML、不支援壓縮格式等等…以致使用Java來開發爬蟲,往往需要使用相當多 套件,同時也編寫更多的程式碼。爬蟲開發的便利性,相較其它語言;如Python,確實相對遜色。
爬蟲包的產生,主要是以Jsoup為核心,整合各式套件,修補中文處理 問題。並提供SOP開發模式,減少開發時間,且更容易上手。
同時爬蟲包也是一個開源專案,採Apache2.0授權(可商用、再修改)。 並已上傳至公開伺服器 提供下載,你可以很簡易的將爬蟲包加入專案中
範例 Maven pom.xml,其它支援格式
<dependency>
    <groupId>com.github.abola</groupId>
    <artifactId>crawler</artifactId>
    <version>[1.0.0,2.0.0)</version>
</dependency>

使用爬蟲包,通常你可以在簡短的數行程式碼中,完成許多繁鎖的工作
// 北市Youbike資訊
String uri = "gz:https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.gz";

// 列出所有大安區內的租借站
CrawlerPack.start()
    .getFromJson(uri)
    .select("retVal > *:contains(大安區)")
上述範例中,至少進行了以下項目
  • 使用 https 協定,取得遠端資源
  • 解縮壓檔案 YouBikeTP.gz
  • 讀取/解析 Json 格式內容
  • 將 Json 轉換為 Jsoup 物件
  • 使用 Jsoup 內建的 CSS Selector 取出資料


2016年1月24日 星期日

Java 爬蟲 - 如何使用爬蟲包取得PTT八卦版文章


本篇將簡易介紹如何使用 Java 網路資料爬蟲包 取得PTT八卦版文章。如果本篇對您有幫助,也請您給 Java 網路資料爬蟲包 (https://github.com/abola/CrawlerPack) 一個星星做為獎勵。

本篇目標:取得 PTT 八卦版最後50篇文章的 URL


先將爬蟲包加入你的專案中

Maven
<dependency>
    <groupId>com.github.abola</groupId>
    <artifactId>crawler</artifactId>
    <version>1.0.3</version>
</dependency>

or Gradle
dependencies {
    compile 'com.github.abola:crawler:1.0.3'
}
(其它工具請參考 http://mvnrepository.com/artifact/com.github.abola/crawler/1.0.0)


首先我們要先計算頁面 index 是多少

String prevPage =
  CrawlerPack.start()
    .addCookie("over18","1")     // 八卦版進入需要設定cookie
    .getFromHtml(gossipMainPage) // 遠端資料格式為 HTML
    // 取得右上角『前一頁』的內容
    .select(".action-bar .pull-right > a")
    .get(1).attr("href")
    .replaceAll("/bbs/Gossiping/index([0-9]+).html", "$1");
// 目前最末頁 index 編號
Integer lastPage = Integer.valueOf(prevPage)+1;

然後逐頁往前掃描,直到目標數量

List lastPostsLink = new ArrayList();
while ( 50 > lastPostsLink.size() ){
  // 每次往前一頁
  String currPage = String.format(gossipIndexPage, lastPage--);

  Elements links =
    CrawlerPack.start()
      .addCookie("over18", "1")
      .getFromHtml(currPage)
      .select(".title > a");

  for( Element link: links) 
    lastPostsLink.add( link.attr("href") );}

ok 就那麼簡單,完整Source Code取得到至
https://github.com/abola/CrawlerPack/blob/master/example/PttGossiping.java

OSSRH: 完成首次Release回報及使用

這到邊,我們已經完成所有必要的工作了。只要再去回覆原本申請的ticket,待管理員確認後開啟設定。專案就正式在網路上公開使用了,並且之後上傳都不需要再申請。

開始前確認完成事項


  • 確認完成一次以上的上傳作業

返回OSSRH 新專案申請 ticker

返回ticket後,直接點 Common 並且留言,表達你已完成首次上傳,認真點,不要用中文
簡易提及你完成了就可以

耐心等待管理員確認

一樣,管理員應該是在美國,所以他們的上班時間是我們的深夜,審核完成時間都是在台灣時間 PM 11:00之後。審核完成後,管理員會將ticket調整為  CLOSED ,恭喜你,你的專案已完成在網路上公開下載了。

專案上傳後多久才能使用?

依照說明通常是10分鐘左右就可以使用,最多可能等到兩小時,不過實際上等過超過四小時的情況也是有的。你可以到 http://search.maven.org/#stats 看最後一次index refresh是什麼時候,如果很接近目前時間,那應該10分鐘內就可以使用了,如果已經過了許久未更新,那就別太期待,去做別的事吧。

專案上傳後,我要如何使用/下載專案

以爬蟲包為例 http://mvnrepository.com/artifact/com.github.abola/crawler/1.0.0
com.github.abola - 這是你的Group Id
crawler - 這是Artifact Id
1.0.0 - 這個是 version
上面就有列出使用maven, gradle 等等工具呼叫的使用方式

其它特別工具

取得你專案目前最新版號的圖示


https://maven-badges.herokuapp.com/maven-central/com.github.abola/crawler/badge.svg
com.github.abola - 這是你的Group Id
crawler - 這是Artifact Id
svg - 這是輸出的格式,可替換成png

OSSRH 上傳教學系列文章就到此結束,希望本系列文章對您有幫助。

OSSRH: 建立你的第一次release

還記得第一步中申請的ticket還在等待回覆嗎?只要到了等待回覆,我們就可以開始上傳專案上Maven Central。本篇會直接使用命令列的方式完成。

開始前,請確認以下動作都已完成或達到
  1. JIRA ticket 已送出申請,並且狀態為  RESOLVED  
  2.  GPG 金鑰已產生,而且要在同一台機器及帳號下操作
  3. ~/.m2/settings.xml 已完成設定
  4. 專案中的 pom.xml 已完成設定 
如果以上都完成了,接下來的動作將會很容易

以 https://github.com/abola/CrawlerPack 為例

 git clone https://github.com/abola/CrawlerPack.git  
 cd CrawlerPack  
 mvn clean deploy  

將上述顏色標記資訊,修改為你的帳號與專案名稱即可。如果以上指令無誤執行完成如下


那你的上傳就算完成囉!

之後如果有新的版本要release。只要提升 <version> ,重複本步即可。如果首次上傳回報還沒完成,記得還有一步要進行,這個專案才會正式的公開於網路上喔。

OSSRH: 完成你專案完整的 pom.xml

所有過程中最重要的就是你的pom.xml設定,這個檔案通常跟你的專案是包在一起的。本篇我們會針對上傳maven central必備的元素,分段說明。

Coordinates

這個是你先前在OSSRH所申請的專案的路徑,也是將來大家載入這個專案時要輸入的內容

 <groupId>com.github.abola</groupId>  
 <artifactId>crawler</artifactId>  
 <version>1.0.0</version>  


Project Information

這區是為你所上傳的專案,增加一些說明,設定的內容會顯示在公開的repository相關網站上

 <name>Crawler Pack</name>  
 <description>This is a open project of Java. The project integrated Apache Commons-VFS and Jsoup. It can be grabbing data much easy.</description>  
 <url>https://github.com/abola/CrawlerPack</url>  

  • <name> 專案名稱
  • <description> 專案描述
  • <url> 專案網址
本段的設定顯示在 http://mvnrepository.com/ 的比照

SCM

這段是設定你的原始碼版本控制資訊,如果是託管在Github上,就可參考以下設定 

 <scm>  
  <connection>scm:git:git@github.com:abola/CrawlerPack.git</connectio>  
  <developerConnection>scm:git:git@github.com:abola/CrawlerPack.git</developerConnection>  
  <url>git@github.com:abola/CrawlerPack.git</url>  
 </scm>  

上方設定,對照你的github網址,顏色對應如下
https://github.com/abola/CrawlerPack

License

設定你的專案授權,比較常見的有Apache 2.0或是MIT,請依需求擇選一種

Apache License 2.0
   <licenses>  
     <license>  
       <name>Apache License, Version 2.0</name>  
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>  
     </license>  
   </licenses>  

MIT License
 <licenses>  
   <license>  
     <name>MIT License</name>  
     <url>http://www.opensource.org/licenses/mit-license.php</url>  
   </license>  
 </licenses>  

Developer Information

專案開發者資訊

   <developers>  
     <developer>  
       <name>Abola Lee</name>  
       <email>abola921@gmail.com</email>  
     </developer>  
   </developers>  


Project Dependencies

這些是你的專案會需要那些其它的package

   <dependencies>  
     <dependency>  
       <groupId>org.apache.commons</groupId>  
       <artifactId>commons-vfs2</artifactId>  
       <version>2.0</version>  
     </dependency>  
     ...  
   </dependencies>  


以上三項設定,你也可以在完成上傳後在  http://mvnrepository.com/  看到結果


Build

這段我們一口氣要設定產生 javadoc / 打包 Surce / 為檔案產生簽章檔 / 上傳管理的套件,原則上你可以直接copy以下設定不需修改。

  <build>  
   <plugins>  
    <plugin>  
     <groupId>org.sonatype.plugins</groupId>  
     <artifactId>nexus-staging-maven-plugin</artifactId>  
     <version>1.6.3</version>  
     <extensions>true</extensions>  
     <configuration>  
      <serverId>ossrh</serverId>  
      <nexusUrl>https://oss.sonatype.org/</nexusUrl>  
      <autoReleaseAfterClose>true</autoReleaseAfterClose>  
     </configuration>  
    </plugin>  
    <plugin>  
     <groupId>org.apache.maven.plugins</groupId>  
     <artifactId>maven-gpg-plugin</artifactId>  
     <executions>  
      <execution>  
       <id>sign-artifacts</id>  
       <phase>verify</phase>  
       <goals>  
        <goal>sign</goal>  
       </goals>  
      </execution>  
     </executions>  
    </plugin>  
    <plugin>  
     <groupId>org.apache.maven.plugins</groupId>  
     <artifactId>maven-source-plugin</artifactId>  
     <executions>  
      <execution>  
       <id>attach-sources</id>  
       <goals>  
        <goal>jar-no-fork</goal>  
       </goals>  
      </execution>  
     </executions>  
    </plugin>  
    <plugin>  
     <groupId>org.apache.maven.plugins</groupId>  
     <artifactId>maven-javadoc-plugin</artifactId>  
     <executions>  
      <execution>  
       <id>attach-javadocs</id>  
       <goals>  
        <goal>jar</goal>  
       </goals>  
      </execution>  
     </executions>  
    </plugin>  
   </plugins>  
  </build>  




整段完整的 pom.xml 你可以參考爬蟲包專案的原始碼如下
https://github.com/abola/CrawlerPack/blob/master/pom.xml

OSSRH: 將私密資訊填入settings.xml

前兩篇我們一共有兩組私密資訊,在上傳maven central時會用的到。分別是:

  • JIRA的帳號/密碼
  • GPG 私鑰密碼
這些資訊當然不能跟著一起上傳,所以我們必需將它設定在 settings.xml 中。你應該可以在 .m2 的目錄下找到這個檔案。如果沒有的話,就自己產生一個吧

 vi ~/.m2/settings.xml  

設定 JIRA 帳號資訊


  <servers>   
   <server>   
   <id>ossrh</id>   
   <username>abola921</username>   
   <password>*******</password>   
   </server>   
  </servers>   

<id> 先不要修改他,之後實際的server位置會在 pom.xml 中設定,<id>只是對應用的。
<username> 這個是你在JIRA所申請的 username
<password> 當然是你的密碼

設定GPG 私鑰密碼

  <profiles>   
   <profile>   
   <id>ossrh</id>   
   <activation>   
    <activeByDefault>true</activeByDefault>   
   </activation>   
   <properties>   
    <gpg.executable>gpg</gpg.executable>   
    <gpg.passphrase>*********</gpg.passphrase>   
   </properties>   
   </profile>   
  </profiles>   

這段,你只要在<gpg.passphrase>中,設定先前私鑰密碼即可。



完整的 ~/.m2/settings.xml 會像以下

 <?xml version="1.0" encoding="UTF-8"?>  
 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  <servers>  
   <server>  
    <id>ossrh</id>  
    <username>abola921</username>  
    <password>*******</password>  
   </server>  
  </servers>  
  <profiles>  
   <profile>  
    <id>ossrh</id>  
    <activation>  
     <activeByDefault>true</activeByDefault>  
    </activation>  
    <properties>  
     <gpg.executable>gpg</gpg.executable>  
     <gpg.passphrase>*********</gpg.passphrase>  
    </properties>  
   </profile>  
  </profiles>  
 </settings>  


存檔,這步我們就算完成了,接下來要設定 pom.xml