DUICUO

GitHub で 12,000 を超えるスターを獲得したチケット取得ツールが大幅に更新され、待機リストをサポートするようになりました。

計算してみると、国慶節のゴールデンウィークまであと2週間!旅行のチケットはもう手に入れましたか?

[[276822]]

画像はpexelsから

国務院弁公庁が2019年の一部の祝日の取り決めに関して発行した通知によると、国慶節の祝日は10月1日から7日までとなる。

建国記念日の連休中に旅行を計画している方は、数日前にチケット購入で大騒ぎになったのではないでしょうか。ところで、Pythonでチケットを盗むツールを誤ってGitHubのトレンドリストのトップに上げてしまいました。

プロジェクト名は「12306」と分かりやすく、現在12,000個以上のスターを獲得しています。このプロジェクトは、Wen Xianpingというプログラマーによって開始されました。

[[276823]]

これはおそらくGitHubで最も評価の高いチケット購入アシスタントです。機能は継続的に更新されており、現在はPython 3.6以降をサポートしています。

いくつかの新進気鋭の製品もこれに基づいて開発され、広く普及しました。

そのうちの一つが「py12306」で、5,000以上のスターを獲得し、分散チケット取得をサポートしています。国慶節後の春節の旅行ラッシュに備えて、チケットを確保する必要がある場合は、これらのPythonツールを試してみる価値があります。すでに多くの人がこれらのツールをうまく活用しています。

GitHub で高く評価されているチケット獲得プロジェクト 2 つ

12306 チケット購入アシスタント

Wen Xianping/Wen Xiansheng (testerSunshine) のチケット取得アシスタント「12306」は 2018 年初頭に作成されましたが、最後のコード提出は今年 9 月 5 日であったため、まだ非常に新しいものです。

この有能な小さなヘルパーは、明確かつ簡潔な思考プロセスを持っています。

チケットの空き状況の確認から支払いの完了、そして注文番号の取得まで、すべてがシームレスに行われ、人間のタイピング速度がそれほど遅くないことを証明しています。

温氏は昨年、このアプリのおかげで無事に帰国の切符を手に入れました。その後、彼はこの切符ゲットアシスタントの進化に尽力しました。

現在までに、Wen 氏と他の貢献者は 361 件のコードエントリをプロジェクトに提出し、次の機能を実装しました。

アップデートログによると、最近追加された重要な機能はウェイティングリストシステムです。ウェイティングリストシステムでは、チケットが売り切れた場合にユーザーが前払いでチケットを購入し、他の乗客がチケットをキャンセルすると自動的に空席を埋めることができます。この新しい仕組みは、私の国で2019年の春節の旅行ラッシュの際に導入されました。

しかし、ウェン氏はチケット取得アシスタントにおけるこの機能の具体的なニーズがまだ不明なため、現在集中的な試行と調整を行っています。

新機能の実装に加え、既存機能の最適化も継続的に行われています。このチケット取得ツールはますます強力になっており、CAPTCHAの自動解決、自動ログイン、事前販売と直前のチケット取得、インテリジェントなウェイティングリスト、メール通知、Pushbear通知などの機能が追加されています。GitHubのスター数も、年初4,000から4倍に増加しました。

プロジェクトが拡大するにつれ、ウェン氏は 8 月 31 日に重要な発表を行いました。Python 2.7 のサポートを停止し、バージョン 3.6 以降のみをサポートするというものです。

このプロジェクトを詳しく見てみましょう。

① 依存ライブラリ

CAPTCHAは現在ローカルで認識可能です。モデルをダウンロードし、プロジェクトのルートディレクトリに配置する必要があります。すべてのコードはこのプロジェクト(https://github.com/zhaipro/easy12306)から提供されており、感謝の意を表します。

  1. 追伸:
  2. 1.モデルのダウンロードリンク: https://pan.baidu.com/s/1rS155VjweWVWIJogakechA パスワード: bmlm
  3. グループからダウンロードすることもできます。
  4. 2. Gitリポジトリをダウンロードします: https://github.com/testerSunshine/12306model.git

requirements.txt でプロジェクトの依存関係を表示します。

  1. https://github.com/testerSunshine/12306/blob/master/requirements.txt

インストール方法 x:

  • ルートユーザー(複数の Python 環境によって発生する問題を回避するため):pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  • 非ルートユーザーの場合(インストール時と実行時に異なる環境を使用することを避けるため):`pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`

② プロジェクトユーザーマニュアル

サーバーの起動:

  • 設定ファイルを編集してメールアドレスを設定できます。メールアドレスの形式は設定ファイルに記載されています(例:"ex")。Server Jiang では、設定ファイルを設定する際はスペースに注意し、Python 構文に従うことを推奨しています(推奨)。
  • まず、ルート ディレクトリで `sudo python run.py` を実行します。

サーバーに Docker と Docker-Compose がインストールされている場合は、Docker-Compose を使用して起動できます。

docker.sh スクリプトはこの機能をカプセル化しており、次のコマンドを使用して起動できます。

  • sudo ./docker.sh run # イメージを作成し、コンテナを起動します。イメージが既に作成されている場合は、コンテナを直接起動します。
  • sudo ./docker.sh restart # 設定ファイルを変更した後、このコマンドを使用してコンテナを再ロードして実行できます。
  • sudo ./docker.sh rm # コンテナを削除します。
  • sudo ./docker.sh drun # コンテナをバックグラウンドで実行します。
  • sudo ./docker.sh logs # このコマンドを使用すると、バックグラウンドで実行されているログを表示できます。
  • 注: Docker 環境を持たないユーザー向けに、Docker インストール スクリプト (CentOS7) が提供されています - sudo ./docker_install_centos.sh。

③ ディレクトリ対応説明

目次に対応する説明は次のとおりです。

  • 代理店CDNプロキシ
  • config - プロジェクト構成
  • 検証 - 自動キャプチャ解読
  • init - プロジェクトのメインランタイムディレクトリ
  • インターフェース
  • myException - 例外
  • myUrllib リクエストネットワークリクエストライブラリ

④ ログの例

成功ログをお送りください。チケット購入に失敗した場合は、失敗ログもお送りください。できる限りトラブルシューティングをお手伝いいたします。グループに参加して、さらに詳しく話し合うこともできます。このプログラムはチケット購入プロセスを迅速化するだけで、チケットが購入できることを保証するものではありません。

  1. 355回目の検索です。旅行日:2018年2月12日。列車番号:G4741、G2365、G1371、G1377、G1329。チケットは見つかりませんでした。エージェント設定:なし。合計時間:429ミリ秒。
  2. 列車番号: G4741 出発駅: 上海 到着駅: 邵陽 二等席: 空席あり
  3. チケット予約を送信しようとしています...
  4. 注文を送信してみてください...
  5. チケット発行に成功しました
  6. キューは成功しました。チケットは 359 枚残っています。
  7. 自動CAPTCHA認識機能の使用
  8. 確認コードが渡されました。注文を送信しています。
  9. 注文は正常に送信されました。
  10. 推定残りキュー時間は -12 ミリ秒です。
  11. 推定残りキュー時間は -6 ミリ秒です。
  12. キュー内の推定残り待機時間は -7 ミリ秒です。
  13. 推定残りキュー時間は -4 ミリ秒です。
  14. 推定残りキュー時間は -4 ミリ秒です。
  15. チケットのご予約、おめでとうございます!ご注文番号はEB52743573です。ブラウザを開いて12306にログインし、「未完了の注文」から30分以内にお支払いを完了してください。

実践的なスキルをお持ちの方におすすめです。チケット取得の効率が2倍になります。そのため、複数のタスクを同時に実行できるツールなど、複数のツールを試してみることをお勧めします。

py12306 チケットアシスタント

pjialin というプログラマーが Wen 氏からコードの一部を借りて、py12306 Ticket Assistant という分散ツールを開発しました。

つまり、1台のマシンが接続を確保できない場合でも、複数のハードウェアデバイスを同時に実行できます。また、マルチタスク(複数の列車)、複数日付、複数アカウントの同時クエリもサポートしています。さらに、複数の出発駅と到着駅の組み合わせを同時に監視できるという独創的な機能も備えています。

例えば、北京発の列車の切符が売り切れていた場合、次の駅まで行けば列車に乗れます。また、自宅近くで切符が買えない場合は、最終目的地までの切符を直接買うこともできます。タイピング速度に制限があるものの、妥協したいという方のために、このツールは切符の空き状況を自動で確認してくれます。

プロジェクト作者は、ウェン氏のアルゴリズムと bypass12306 を試したが成功しなかったため、独自のチケット取得ツールを作成したと述べています。

この新しいツールを使って、彼は一度に複数のチケットを手に入れることに成功しました。

このプロジェクトは Python 3.6 以上もサポートしており、現在 5,000 個のスターを獲得しています。


使い方を見てみましょう: PS: py12306 を実行するには Python 3.6 以上が必要です (他のバージョンはまだテストされていません)。

① 依存関係をインストールする

  1. git クローン https://github.com/pjialin/py12306  
  2. pip インストール -r 要件.txt

②設定プログラム

  1. cp env.py.example env.py

自動 CAPTCHA 解決: CAPTCHA はローカルで認識できます。使用されるモデルとアルゴリズムは次のとおりです。

  1. https://github.com/zhaipro/easy12306

音声通知:音声認証コードは、Alibaba Cloud API Marketplaceのサービスプロバイダーから取得します。購入後、アプリコードを設定に入力する必要があります。

  1. https://market.aliyun.com/products/56928004/cmapi026600.html

③ 発売前テスト

現在、ユーザー アカウントの検出、乗客情報の検出、駅の検出​​など、いくつかの簡単なテストが提供されています。

テストを開始 -t:

  1. Python main.py -t

通知メッセージをテストする (音声、電子メール) -t -n:

  1. # デフォルトでは通知テストは実行されません。通知をテストするには、-nパラメータを追加する必要があります。
  2. Python main.py -t -n

④ プログラムを実行する

  1. Python メイン.py

パラメータリストは次のとおりです。

  • -t: テスト構成情報
  • -t -n: テスト構成情報と通知メッセージ
  • -c: カスタム構成ファイルの場所を指定します

分散クラスターは Redis に依存しており、現在のサポート状況は次のとおりです。

  • 単一のマスターノードで複数の子ノードを同時に実行できます。
  • マスター ノードに障害が発生した場合、子ノードが自動的にマスターに昇格されます。
  • マスター ノードが復元されると、自動的に真のマスター ノードに戻ります。
  • 構成はマスター ノードを通じてすべての子ノードに同期されます。
  • マスター ノードの設定を変更した後、子ノードを再起動する必要はありません。自動更新がサポートされています。
  • 子ノードからのメッセージはマスターノードにリアルタイムで同期されます。

使用方法: 構成ファイルで CLUSTER_ENABLED をオンにして分散モードを有効にします。

現在、子ノード用の別個の設定ファイル env.slave.py.example が提供されています。このファイルを env.slave.py に変更するだけで、`python main.py -c env.slave.py` ですぐに起動できます。

Dockerの使用

① 設定ファイルをローカルマシンにダウンロードする

  1. docker run --rm pjialin/py12306 cat /config/env.py > env.py  
  2. # または
  3. カール https://raw.githubusercontent.com/pjialin/py12306/master/env.docker.py.example -o env.py

② 設定を変更して実行

  1. docker run --rm --name py12306 -p 8008:8008 -d -v $(pwd):/config -v py12306:/data pjialin/py12306  

現在のディレクトリに12306.logという新しいログファイルが作成されます。コマンド「tail -f 12306.log」を使用してください。

Docker-Compose では以下のように使用されます。

① 設定ファイルをコピーする

  1. docker-compose.yml の例を cp docker-compose.yml にコピーします。

② Docker-Composeから実行

docker-compose.yml があるディレクトリで次のコマンドを使用します。

  1. docker-compose up -d

Web管理ページ

現在、ユーザー、タスク、リアルタイム ログの表示がサポートされており、将来的にはさらに多くの機能が追加される予定です。

Web機能を有効にするには、設定でWEB_ENABLEをオンにする必要があります。プログラムを起動後、現在のホストアドレス+ポート番号(デフォルトは8008)(例:http://127.0.0.1:8008)でアクセスすることでWeb機能にアクセスできます。

アンチブロッキングについて:現在、クエリとログイン操作は分離されており、クエリはユーザーのログイン状態に依存しません。AクラウドまたはTクラウドに配置すると、IPアドレスによるアクセス制限を受けやすくなります。他のネットワーク環境で実行することをお勧めします。

[[276825]]

最後に、友人全員が建国記念日の休日に無事に帰宅できることを祈っています。

[[276826]]

12306 プロジェクトポータル:

  1. https://github.com/testerSunshine/12306

py12306 プロジェクトポータル:

  1. https://github.com/pjialin/py12306/