Pythonを使用してWorld of Warcraftのゲームマスターキャラクターを計算する

私はかつてWorld of Warcraftで双子を見つけるためのサイトを持っていました。 誰でもニックネームを入力して、同じレコードにある文字のリストを取得できます(もちろん、データがサイトのデータベースにある場合)。

そしてある日、ブリザードからの訪問者が私のところに来ました。

画像

初めて訪れる人の99%が自分自身と友人を探しています。 フランスからの訪問者も例外ではなく、閲覧ログにいくつかのキャラクターを残しました。おそらく、ブリザードの従業員のものでした(フォーラムでの活動や他の兆候から明らかでした)。 もちろん、私はゲームマスターのキャラクターが普通の人間のキャラクターとどう違うのか、まったく違うのかどうか疑問に思っていました。

これらのキャラクターの成果を見た後、サービスを開始すると、新たに作成されたGMUがすべてのBlizzardゲームの収集可能なエディションのコレクションを与えられたことが明らかになりました。 綿密な調査の後、1つの詳細が明らかになりました: すべての収集品は同じ日に (明らかに、おおよその雇用日)に受け取られました

画像

Battle.net APIを使用する


Gmaは、すべての既存の(受領日)収集品を取得します。したがって、最初の「バニラ」を取得します。 10年以上前にリリースされましたが、今日では2〜3千ユーロでeBayでのみ入手できます。 他のキャラクターを検索するために使用します。

そのようなペットを飼っているキャラクターを検索します(バニラコレクションを有効にするとボーナスが与えられます)。

画像

APIはキャラクターリストへの直接アクセスを提供しないため、オークションを通じてキャラクターを検索します。

realm = "" # ,      #      r = requests.get("http://eu.battle.net/api/wow/auction/data/%s" % realm) auction_dump_url = json.loads(r.text)["files"][0]["url"] #       auc_data = json.loads(requests.get(auction_dump_url).text) #   /  chars = {(lot["owner"], lot["ownerRealm"]) for lot in auc_data["auctions"]["auctions"]} 

この関数では、文字が潜在的なumであるかどうかを判断します。

 def is_gm(name, realm): r = requests.get(CHAR_API_URL.format(name=name, realm=realm)) if r.text.find("Panda Cub") != -1: return True 

チェックを実行します。

 for name, realm in chars: if is_gm(name, realm): print(" : %s %s" % (name, realm)) time.sleep(1) 

スクリプトコード全体
 import json import requests import time CHAR_API_URL = "http://eu.battle.net/api/wow/character/{realm}/{name}?fields=pets,guild" #    ,      def is_gm(name, realm): r = requests.get(CHAR_API_URL.format(name=name, realm=realm)) if r.text.find("Panda Cub") != -1: return True realm = "" # ,      #      r = requests.get("http://eu.battle.net/api/wow/auction/data/%s" % realm) auction_dump_url = json.loads(r.text)["files"][0]["url"] #       auc_data = json.loads(requests.get(auction_dump_url).text) #   /  chars = {(lot["owner"], lot["ownerRealm"]) for lot in auc_data["auctions"]["auctions"]} #   for name, realm in chars: if is_gm(name, realm): print(" : %s %s" % (name, realm)) time.sleep(1) 


注:このスクリプトは、オークションに参加するキャラクターのみを検索します。 より広い範囲をカバーするには、ロットの各所有者のギルドをスキャンすることもできます。

次に、他の兆候-1日に受け取った収集品の数、合計数などを確認する必要があります。
もちろん、基準を満たすすべてのキャラクターがGMに属するわけではありません。 たとえば、単なるコレクターにすることができます。

スクリプトの結果を表示するために、単純なサイトを作成しました: http : //wow-gm-track.website

興味深いことに、スキャンプロセス中に、巣全体(ギルド)が特定されました。ギルドでは、(おそらく)GMに属する複数の異なるアカウントが一度に見つかりました。 例: Call of the Ancients (ギルドの頭を含む6ピース)。

いくつかの統計:これまでに、ロシア語圏で170万文字がスキャンされ、1306文字(0.07%)にはバニラコレクションがあり、そのうち1日で少なくとも4つの収集物を受け取ったのは380文字のみで(合計の0.02% )

Source: https://habr.com/ru/post/J259463/


All Articles