使用第三方函式庫匯出 Forsquare Check-in 資料

Photo Credit: dontfeartheforward

使用第三方函式庫匯出 Forsquare Check-in 資料

Aaron Chiang bio photo By Aaron Chiang Comment

Twitter 上面看到有人把 Move 的紀錄匯入到 世界迷霧 上,於是想到把自己的 Foursquare Check-In 記錄給匯出成 GPX 格式,方便匯入。

申請 Token

連結到 https://developer.foursquare.com/docs/explore 登入 Fouraquare 帳號後,按下 Allow 按鈕之後就會顯示下列畫面,將紅線圈顯處的值複製下來備用。

Foursuqare Token

下載 SharpSquare 程式碼

開啟 SharpSquare 並下載原始檔案。

由於函式庫的建構子並不支援僅丟入上述步驟的 Token,因此開啟 SharpSquare.cs ,將下述增加的建構子部分複製貼上後重新編譯即可。

//增加的建構子
public SharpSquare(string accessToken)
{
    this.accessToken = accessToken;
}

操作 LINQPad 匯出 GPX 格式

  1. 開啟 LINQPad

  2. 按下 F4 加入參考編譯好的 SharpSquare 函式庫 LINQPad Add References

  3. 輸入紅線圈顯處的值 LINQPad Add Namespace

  4. 貼上下列程式碼,並替換掉所申請的 Token ,按下 F5 執行,則下方結果區會出現你在 Foursquare 所有的 Check-in 記錄。

void Main()
{
  var square = new SharpSquare("YOUR TOKEN");
  
  var tmp = "";
  var checkinData = "";
  var counter = 0;
  do {
    var parameters = new Dictionary<string, string>();
    parameters.Add("limit", "250");
    parameters.Add("offset", counter.ToString());
    var items = square.GetUserCheckins("self", parameters);
  
    var sb = new StringBuilder();
    foreach(var item in items)
    {
      sb.Append("\t<trk>\n");
      sb.AppendFormat("\t\t<name>{0}</name>\n", item.venue.name);
      sb.Append("\t\t<trkseg>\n");
      sb.AppendFormat("\t\t\t<trkpt lat=\"{0}\" lon=\"{1}\">\n", item.venue.location.lat, item.venue.location.lng);
      sb.AppendFormat("\t\t\t<time>{0}</time>\n", item.createdAt);
      sb.Append("\t\t</trkpt>\n");
      sb.Append("\t\t</trkseg>\n");
      sb.Append("\t</trk>\n");
    }
    tmp = sb.ToString();
    checkinData += tmp;
    counter += 250;
  } while(!string.IsNullOrEmpty(tmp)); 
  
  var result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n";
  result += "<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:gpxx=\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\" xmlns:gpxtpx=\"http://www.garmin.com/xmlschemas/TrackPointExtension/v1\" creator=\"Oregon 400t\" version=\"1.1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd\">\n";
    result += "\t<metadata>\n";
    result += "\t\t<link href=\"http://www.foursquare.com\">\n";
    result += "\t\t\t<text>Foursquare Checkins</text>\n";
    result += "\t\t</link>\n";
    result += "\t\t<time>" + DateTime.Now.ToString("s") + "</time>\n";
    result += "\t</metadata>\n";
  result += checkinData;
  result += "</gpx>\n";
  result.Dump();
}