前の記事では、CouchDBを紹介しました。今回は、学んだことを適用できる本格的なアプリを作成します。チュートリアルの最後にデータベースを保護する方法も学びます。
キーテイクアウトボックスにはcouchdbがインストールされていないため、手動で行う必要があります。ただし、単なるcouchdbだけではありません。このアプリは、GEOデータ(緯度と長期)で動作する必要があります。Googleマップからの境界ボックス情報をCouchDBに提供します。境界ボックスは、マップに現在表示されている領域を表し、以前のすべての座標ユーザーがその領域に追加したすべての座標もマップに表示されます。 couchdbはデフォルトでそれを行うことができません。そのため、CouchDBにいくつかの空間超大国に与えるために、GeoCouchというプラグインをインストールする必要があります。
それを行う最も簡単な方法は、GeoCouch Dockerコンテナによるものです。 GeoCouchを手動でインストールすることもできますが、ソースからCouchDBをインストールして、すべて手で構成する必要があります。 Unixのひげを持っていない限り、この方法は本当にお勧めしません。先に進んで、Dockerを使用しているVMにインストールして、完了したらここに戻ってきてください。
geocouchのインストール
最初に、リポジトリをクローンして作成したディレクトリ内でナビゲートします。これを行う必要があります。現在使用されているダウンロードURLがすでに失敗しているためです。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
それが開始されたら、次のコマンドを実行して実行されているかどうかをテストできます。
VMの外で、ポートを適切に転送した場合、それは次のとおりです。<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
以下を返す必要があります
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
プロジェクトのセットアップ
<span>curl localhost:5984 </span>
を使用して新しいプロジェクトを作成します
<span>curl 192.168.33.10:5984 </span>
それぞれの簡単な概要を次に示します:
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
次に、空間検索に応答するための設計ドキュメントを作成します。ビュードロップダウンでデザインドキュメントを選択して、新しいドキュメントをクリックすることで、それを行うことができます。デザインドキュメントを作成するためにページに入れたら、フィールドの追加ボタンをクリックして、フィールド名として空間を追加し、次の値として次のように追加します。
この設計文書は、GeoCouchが提供する空間関数を利用しています。最初に行うことは、ドキュメントにlocフィールドがあるかどうかを確認することです。 LOCフィールドは、特定の場所の座標を含む配列であり、最初のアイテムには緯度を含み、2番目のアイテムには経度が含まれています。ドキュメントがこの基準を満たしている場合、通常のビューと同じようにEMIT()関数を使用します。キーはジオイソンのジオメトリであり、値はポケモンとスプライトの名前を含む配列です。
設計ドキュメントにリクエストを行う場合、JSONアレイの形式を持つstart_rangeとend_rangeを指定する必要があります。各アイテムは、数字またはnullのいずれかです。オープンレンジが必要な場合は、nullが使用されます。これがリクエストの例です
およびその出力:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
GeoCouchでできる特定の操作について詳しく知りたい場合は、ドキュメントまたはwikiを必ずお読みください。
プロジェクトの作成
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
poke輸入業者
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
このスクリプトは、ポケモンAPIのpokedexエンドポイントにリクエストを行います。このエンドポイントには、PokeDexバージョンのIDが必要です。 Pokemon Goは現在、プレイヤーが第1世代からポケモンを捕まえることができるため、IDとして2を供給しています。これにより、元のポケモンゲームのカント地域からすべてのポケモンが返されます。次に、データをループし、必要な情報をすべて抽出し、スプライトを保存し、抽出されたデータを使用して新しいドキュメントを作成します。
ルート
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
ホームコントローラー
couchdb
と話しています<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
クラス内で、新しいGuzzleクライアントを作成します。 CouchDBのPHPクライアントの一部ではなくGuzzleを使用しています。
SearchPokemonは、自動配置機能によって使用されるデータを返す責任があります。 CouchDBは実際にはSQLで慣れている同様の状態をサポートしていないため、少しハックを使用してそれを模倣しています。ここでのトリックは、正確な一致のみを返すだけのキーの代わりにstart_keyとend_keyを使用することです。 FFF0は、基本的な多言語平面の最後に割り当てられた特別なユニコード文字の1つです。これにより、実際の文字列が検索されている列の最後にアプリがあるための適切な候補になり、残りの文字が高いためにオプションになります。このハックは短い単語でのみ機能するため、ポケモンの名前を検索するのに十分すぎることに注意してください。
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
MakeGetRequestは、couchdbへの読み取りリクエストを実行するために使用されます。
<span>curl localhost:5984 </span>
isValidCoordinates緯度値と経度値が有効な形式を持っているかどうかをチェックします。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
FetchPokemonsは、以前に作成した空間検索のために設計ドキュメントにリクエストを行う関数です。ここでは、Start_Rangeの値としてSouthwest Coordinatesを指定し、Northeast CoordinatesはEnd_rangeの値として指定します。応答は、データがあまりにも多くのデータを要求するのを防ぐために、最初の100行に制限されています。以前は、CouchDBが実際に必要としないデータが返されたデータがあることもわかりました。フロントエンドで必要なデータのみを抽出してから返すと便利です。私はそれを別の日の最適化として任せることにしました。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
ルートディレクトリでcomposer.jsonを開いて、要件プロパティのすぐ下に次のように追加してから、コンポーザーダンプオートロードを実行します。これにより、SRC/Appディレクトリ内のすべてのファイルを自動装着し、アプリ名空間内で使用できるようにすることができます。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
最後に、ホームコントローラーをコンテナに注入します。 SRC/Dependencies.phpファイルを開き、次のことを下に追加することでこれを行うことができます。
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
ホームページテンプレート
<span>curl localhost:5984 </span>
次に、マップを初期化するための関数を作成します。 Min_Zoomlevelは、ユーザーが世界地図全体を見ることができるまでズームアウトできないように指定されています。 couchdbが返すことができる結果にすでに制限を追加していますが、これは、ユーザーが全世界からデータを選択できることを期待しないようにするための素晴らしい追加でもあります。
<span>curl 192.168.33.10:5984 </span>
ユーザーが追加したいピンポイントの位置のマーカーを作成します。次に、マーカーが押されたときにロケーションを追加するためにモーダルを開くためのイベントリスナーを追加します。
さまざまなマップリスナーを追加:
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
検索ボックス内の場所が変更されたときのイベントリスナーを追加します。
php <span>composer create-project slim/slim-skeleton pokespawn </span>
フェッチポケモン関数は、以前にマップの現在表示可能な領域にプロットされていたポケモンを取得する責任があります。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
これは、ポケモンの名前を入力するためにテキストフィールドの自動接続機能を追加するためのコードです。各提案のレンダリングに使用されるHTMLをカスタマイズするために、renderItem関数が指定されています。これにより、PokemonのIDをデータ属性として追加できます。これを使用して、提案が選択されたら、Pokemon_IDフィールドの値を設定するために使用できます。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
スタイル
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
の保護
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
couchdbのインストールにサーバー管理者がまだない場合は、応答として以下を取得します。
<span>curl localhost:5984 </span>
<span>curl 192.168.33.10:5984 </span>
デフォルトでは、CouchDBにはサーバー管理者がいないため、1つを作成すると、管理者が終了します。サーバー管理者は神のような力を持っているので、おそらく1つまたは2つだけを作成する方が良いことに注意してください。次に、CRUD操作のみを実行できるデータベース管理者の一握りを作成します。次のコマンドを実行することで、
を実行できます<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
成功した場合、次のような応答が返されます。
これで、別のデータベース名で以前から同じコマンドを試すことができます:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
そして、couchdbはあなたに叫びます:
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
わかりました、それでそれですか?まあ、実際には、あなたが行った唯一のことは、サーバー管理者のみが行うことができるデータベース操作を制限することだけだからです。これには、新しいデータベースの作成、データベースの削除、ユーザーの管理、すべてのデータベース(システムテーブルを含む)への全面的なアクセス、すべてのドキュメントへのCRUD操作などが含まれます。これにより、認定されていないユーザーがまだデータベースでCRUDのことをする力を持っています。布団からログアウトして、これを試してみることができます。 couchdbは、あなたのためにそれらの操作を喜んで実行します。
では、残りの穴にどのようにパッチを当てますか?書き込み操作を実行しようとしているユーザーのユーザー名(挿入または更新)が、許可されているユーザーの名前と同じであるかどうかを確認するデザインドキュメントを作成することで、それを行うことができます。布団では、サーバー管理者またはデータベース管理アカウントを使用してログインし、操作するデータベースを選択し、新しいデザインドキュメントを作成します。 IDを_design/blockanonymouswritesとして設定し、validate_doc_updateという名前のフィールドを追加し、次の値に値を設定します。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
secobjも4番目の議論として渡されますが、実際に作業する必要はありません。それが省略されている理由です。基本的に、SECOBJは、データベースにどのような管理特権が設定されているかを説明しています。
値を追加したら、デザインドキュメントを保存し、ログアウトして、新しいドキュメントを作成するか、既存のドキュメントを更新して、CouchDBがあなたに不満を言うのを見てください。
ユーザー名のみをチェックしているため、攻撃者はユーザー名を推測してパスワードに価値を提供し、機能すると考えているかもしれません。まあ、そうではありません。CouchDBは、設計ドキュメントが実行される前にユーザー名とパスワードが正しいかどうかを最初にチェックするからです。
または、単一のデータベースに多くのユーザーがいる場合は、その役割を確認することもできます。以下の関数は、「pokemon_master」の役割を持たないユーザーにエラーを投げかけます。
アプリを更新して、データベースに適用したセキュリティ対策を使用してラップアップしましょう。最初に.envファイルを更新します:IPアドレスとポートのみでbase_uriを変更し、作成したCouchDBユーザーのユーザー名とパスワードを追加します。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
結論
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
ポケモンスポーンの場所に関するよくある質問
ポケモンゴーでポケモンスポーンの場所を見つけるにはどうすればよいですか?ポケモンゴーのポケモンスポーン位置は、通常、細胞活性が高い地域で見られます。これらのエリアには、公園、ショッピングセンター、その他の公共の場所が含まれます。ポケモンゴーアプリはGPSを使用して場所を追跡し、周囲に基づいてポケモンを生成します。また、Pokemap.netなどのサードパーティアプリまたはWebサイトを使用して、スポーンの場所を見つけることもできます。ただし、サードパーティサービスを使用すると、ポケモンGOのサービス条件に違反し、禁止が発生する可能性があることに注意してください。
ポケモンスポーン位置データを使用して将来のスポーンを予測できますか?将来のスポーンを予測します。データを分析することにより、スポーンの場所と時間のパターンを識別できます。これは、特定の種類のポケモンが将来出現する可能性が高い場所を予測するのに役立ちます。
はい、サードパーティのアプリまたはウェブサイトを使用してポケモンスポーンの場所を見つけることに関連するリスクがあります。これらのサービスは、ポケモンGOの利用規約に違反する可能性があり、禁止される可能性があります。さらに、これらのサービスは常に正確な情報や最新情報を提供するとは限りません。 Pogomap Webサイトに貢献できますか?これにより、マップを最新かつ正確に保つのに役立ちます。ただし、誤った情報を報告することはウェブサイトから禁止される可能性があることに注意してください。Tenorshare Pokemon Go Mapとは何ですか?ポケモンスポーンの場所の地図を提供します。マップはリアルタイムで更新され、産卵しているポケモンの種類とその正確な場所に関する情報が含まれています。ただし、このサービスを使用すると、ポケモンGOのサービス条件に違反し、禁止が発生する可能性があることに注意してください。 Pogomap Webサイトは、ポケモンスポーンの場所の地図を提供しています。マップはリアルタイムで更新され、産卵しているポケモンの種類とその正確な場所に関する情報が含まれています。このウェブサイトを使用して、お住まいの地域でポケモンを見つけてキャッチできます。
ポケモンスポーンの場所を見つけるための他の方法はありますか?場所。たとえば、地元のポケモンゴーコミュニティやフォーラムに参加でき、プレイヤーがスポーンの場所に関する情報を共有できます。また、ゲーム内の近くの機能を使用して、現在の場所に近いポケモンを見つけることもできます。
以上がPokemon Spawn Locations Recorderを作成する方法couchdbの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。