Skip to content

Instantly share code, notes, and snippets.

@jtlimson
Last active November 27, 2020 05:19
Show Gist options
  • Save jtlimson/182620bec9ae86c4e44d175dcfe082f9 to your computer and use it in GitHub Desktop.
Save jtlimson/182620bec9ae86c4e44d175dcfe082f9 to your computer and use it in GitHub Desktop.
Get JapanPost "〒 (郵便記号, yūbin kigō)" delivery status using windows console app
/*
* Author : julius limson
* Description : Get JapanPost "〒 (郵便記号, yūbin kigō)" delivery status
* Parameter : args[0] = Tracking Number
* Output: (delivered, returned to sender, not delivered) and dates.
* usage : in cmd
ProjLocation> Projectname.exe <trackingnumber>
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
namespace Japanpost_deliverystatus
{
class Program
{
static void Main(string[] args)
{
string tracking_number = Regex.Replace(args[0], "[^0-9_.]+", "", RegexOptions.Compiled);
var values = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("requestNo1", tracking_number),
new KeyValuePair<string, string>("search.x", "0"),
new KeyValuePair<string, string>("search.y", "0"),
new KeyValuePair<string, string>("search", "Tracking+start"),
new KeyValuePair<string, string>("locale", "en"),
new KeyValuePair<string, string>("startingUrlPatten", "")
};
var client = new HttpClient();
var requestContent = new FormUrlEncodedContent(values);
var response = client.PostAsync("https://trackings.post.japanpost.jp/services/srv/search/", requestContent).Result;
var content = response.Content.ReadAsStringAsync().Result;
if (response.Content.ReadAsStringAsync().Result.Contains("Final delivery")) {
Console.Write("delivered - {0}\n", tracking_number);
var arr = Regex.Matches(content, @"\d{2}/\d{2}/\d{4}").Cast<Match>()
.Select(m => m.Value)
.ToArray();
string sent_date = arr[0];
string received_date = arr[arr.Count() - 1];
Console.WriteLine("Fulfill on {0} Delivered on {1}", sent_date, received_date);
}
else
{
if (response.Content.ReadAsStringAsync().Result.Contains("Returned to sender"))
{
Console.Write("Returned to sender - {0} \n", tracking_number);
var arr = Regex.Matches(content, @"\d{2}/\d{2}/\d{4}").Cast<Match>()
.Select(m => m.Value)
.ToArray();
string sent_date = arr[0];
string returned_date = arr[arr.Count() - 1];
Console.WriteLine("Fulfill on {0} Returned on {1}", sent_date, returned_date);
}
else {
Console.Write("\"{0}\" - not delivered\n", tracking_number);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment