短縮 URL の展開
bit.lyの展開 - みずぴー日記に bit.ly, a simple url shortener や TinyURL.com - shorten that long URL into a tiny URL, is.gd URL Shortener - The Shortest URLs Around などで行っている短縮 URL の展開方法が記載されています。
gawk の TCP 通信を使うのであれば、以下のようにして記述することが可能です。
#! /usr/bin/gawk -f
# expand_url.awk
BEGIN {
RS = ORS = "\r\n";
base_url = gensub(/http:\/\/(.*)\/.*/, "\\1", 1, ARGV[1]);
url = gensub(/http:\/\/.*\//, "", 1, ARGV[1]);
http_url = "/inet/tcp/0/" base_url "/80";
http_req = "HEAD /" url;
print http_req " HTTP/1.0" |& http_url;
print "User-Agen: expand_url.awk" |& http_url;
print "Accept: */*" |& http_url;
print "Host: " base_url |& http_url;
print "Connection: keep-alive" |& http_url;
print "" |& http_url;
while ((http_url |& getline) > 0) {
if ($1 ~ /Location/) {
expand_url = $2;
}
}
close(http_url);
print expand_url;
}
実際に動かしてみましょう。
$ gawk -f expand_url.awk http://bit.ly/4q0GhX http://gauc.no-ip.org/awk-users-jp/ $ gawk -f expand_url.awk http://tinyurl.com/5w5hys http://gauc.no-ip.org/awk-users-jp/ $ gawk -f expand_url.awk http://is.gd/lAgR http://gauc.no-ip.org/awk-users-jp/
上記の短縮 URL はともに AWK Users JP :: 日本の AWK ユーザのためのハブサイトへのリンクになっています。
次に wget コマンドを使って取得してみます。 こちらの方が手続きが少ない分、簡単です。
#! /usr/bin/gawk -f
# expand_url_2.awk
BEGIN {
wget_cmd = "/usr/bin/wget";
wget_opt = "--spider -o /dev/stdout";
url = ARGV[1];
wget_exec = wget_cmd " " wget_opt " " url;
while (wget_exec | getline > 0) {
if ($1 ~ /^Location/) {
expand_url = $2;
}
}
close(wget_exec);
print expand_url;
}
gawk 系以外の awk を使ったりする場合には、こちらの方が楽かもしれません。
$ nawk -f expand_url_2.awk http://bit.ly/4q0GhX http://gauc.no-ip.org/awk-users-jp/ $ nawk -f expand_url_2.awk http://tinyurl.com/5w5hys http://gauc.no-ip.org/awk-users-jp/ $ nawk -f expand_url_2.awk http://is.gd/lAgR http://gauc.no-ip.org/awk-users-jp/
短縮 URL にはお世話になっているのですが、圧縮は既にLL Golf Hole 1 - tinyurl.comを使ってURLを短縮する DouKaku? の問題で AWK Users JP :: LL Golf #1 - tinyurl.comを使ったURLの短縮 として書いていますが、展開の方は未着手でしたので、参考にしてください。




