0
#!/bin/sh

URL1=http://runescape.com/title.ws
tot=`wget  -qO- $URL1  | grep -i PlayerCount | cut -d\> -f4 | cut -d\< -f1 | sed -e's/,//'`
URL2=http://oldschool.runescape.com
b=`wget -qO- $URL2| grep "people playing" | awk '{print $4}'`
a=`expr $tot - $b`
export LC_ALL=en_US.UTF-8
a_with_comma=`echo $a | awk "{printf \"%'d\n\", \\$1}"`
echo "$a_with_comma people `date '+%r %b %d %Y'`"

これは、URL1 と URL2 から 2 つの数値を取得し、URL2 から URL1 を減算します。http://www.runescape.com/title.ws (URL1)から "48,877 Players Online Now" を取得しようとしています。

URL2 は正常に動作しますが、URL1 を取得できません。

4

2 に答える 2

1

awkここでは、ほとんどのゆがみを取り除くために、オリジナルを 2 つのインスタンスにリファクタリングする簡単な試みを示します。

#!/bin/sh

#URL1=http://runescape.com/title.ws
#tot=$(wget -qO- "$URL1" | awk 'tolower($0) ~ /playercount/ {
#    # Trim anything after this expression
#    gsub(/<\/span> Players Online Now<\/span>.*/, "")
#    # From the remainder, trim anything up through last tag close
#    gsub(/.*>/, "")
#    # Should be left with a number.  Remove any thousands separator
#    gsub(/,/, "")
#    # Should have a computer-readable number now.  Print it
#    print }')
URL0='http://www.runescape.com/c=eWHvvLATbvs/player_count.js?varname=iPlayerCount&callback=jQuery17201610493347980082_1378103074657&_=1378103197632'
tot=$(wget -qO- "$URL0" | awk -F '[()]' '{ print $2 }'

URL2=http://oldschool.runescape.com
wget -qO- "$URL2" | awk -v tot=$tot -v fmt="%'d people " '
    /people playing/ { printf(fmt, tot-$4 )}'
date '+%r %b %d %Y'

の処理は、 の後に続く をURL1検索するため、多少堅牢になるはずです。もちろん、いつでもページの書式設定を変更して、これが再び壊れる可能性があります。したがって、JSON API が提供されている場合は、JSON API を使用する方がよいでしょう。(簡単なグーグル検索では、これが存在することが示唆されていますが、文書化されていません。主な文書はhttp://services.runescape.com/m=rswiki/en/Grand_Exchange_APIsにあるようですが、これにはプレイヤー統計の要約については何もありません。)spanPlayers Online Now

もちろん、コメントは厳密に必要というわけではありません。これらは、ページのソースが再び変更された場合に何を変更すればよいかを理解するのに役立つはずです。そのため、Awk を十分に習得して必要がない場合を除き、それらを削除することはお勧めできません。

編集:プレーヤーの合計数に JSON API を使用するように更新しました。これは、より堅牢で、よりシンプルになるはずです。念のため、元のコードをコメントアウトしたままにしました。

于 2013-09-02T06:20:44.790 に答える
1

あなたは変えることができます...

tot=`wget  -qO- $URL1  | grep -i PlayerCount | cut -d\> -f4 | cut -d\< -f1 | sed -e's/,//'`

... に ...

 tot=`wget  -qO- $URL1 | grep -i playercount | cut -d\> -f5 | cut -d\< -f1 | sed -e's/,//'`

...それはあなたが急いでいる場合です。それ以外の場合は、トリプルのアドバイスに従うことをお勧めします。あなたがACMから賞を受賞するかもしれないことを誰が知っていますか:-)

于 2013-09-02T04:23:27.833 に答える