如何使用CouchdB創建口袋妖怪Spawn位置錄音機
>
鑰匙要點- >使用Geocouch插件增強了CouchDB,以有效地記錄和檢索有關Pokemon Spawn位置的地理空間數據。
- > >使用Homestead改進並建立了一個強大的開發環境,並建立了docker來處理依賴關係並確保在不同機器上建立一致的開發設置。
- 實施纖細的框架和其他PHP軟件包,以促進後端開發,從而有效地與Pokemon API和CouchDB進行溝通。 通過設置服務器管理員和數據庫管理員來防止未經授權的訪問和對數據庫的修改,請通過設置服務器管理員和數據庫管理員來確保CouchDB安裝。
- >利用Google Maps API允許用戶查明並保存口袋妖怪產卵的確切位置,從而增強了應用程序的交互性和功能。 >使用JavaScript和各種庫來實現前端功能,以提供響應式用戶界面,包括映射交互,位置搜索和模態窗口,以獲取數據輸入。
- >通過使用CouchDB憑據更新.ENV文件並將DB類構造函數更新以確保應用程序安全,以將這些憑據包含在基本URI中。
- 概述項目
- >您將建立一個口袋妖怪Spawn Locations Recorder。
- >這將允許用戶保存他們在Pokemon GO上遇到的怪物的位置。 Google Maps將用於搜索位置和放置標記以查明確切位置。一旦用戶對位置感到滿意,可以與標記進行交互,何時將顯示一個模態框,該框允許用戶輸入口袋妖怪的名稱並保存位置。當下一個用戶出現並蒐索相同的位置時,將在地圖中繪製以前用戶添加的值作為標記。該應用程序的外觀:
該項目的完整源代碼可在GitHub上獲得。
如果您沒有設置良好的,孤立的開發環境,建議您使用宅基地改進。 >
盒子沒有安裝CouchDB,因此您需要手動執行此操作;但不只是普通的couchdb。該應用需要與GEO數據(緯度和縱向)一起工作:您將為CouchDB提供來自Google Maps的邊界框信息。邊界框表示當前正在地圖中顯示的區域,並且所有先前的坐標用戶都將添加到該區域的區域也將顯示在地圖上。 CouchDB默認無法做到這一點,這就是為什麼您需要安裝稱為GeoCouch的插件以給Couchdb給一些空間超級大國。
最簡單的方法是通過Geocouch Docker容器的方式。您也可以嘗試手動安裝Geocouch,但它要求您從源安裝CouchDB並手工配置。除非您有Unix鬍鬚,否則我真的不會推薦這種方法。
繼續將Docker安裝到您正在使用的VM中,然後在完成後返回這裡。
>安裝Geocouch
首先,克隆回購併在創建的目錄中導航。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
您需要這樣做,因為當前正在使用的下載URL已經失敗。
# 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
構建docker映像:
>這將需要一段時間,具體取決於您的互聯網連接,因此請抓住小吃。完成後,創建容器並啟動它:
<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>
>在VM外部,如果您正確地轉發了端口,那將是:
><span>curl localhost:5984 </span>
它應該返回以下內容:
><span>curl 192.168.33.10:5984 </span>
請注意,我將在整篇文章中不斷提及192.168.33.10。這是分配給Scotchbox的IP,這是我使用的Vagrant框。如果您正在使用Homestead改進,則IP為192.168.10.10。您可以使用此IP訪問該應用。如果您完全使用其他東西,請根據需要進行適應。
><span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
>
>您將使用細長的框架來加快應用程序的開發。使用作曲家創建一個新項目:Pokespawn是該項目的名稱,因此,一旦完成作曲家,請繼續導航到該目錄。然後,安裝以下額外軟件包:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
- > danrovito/pokephp - 可以輕鬆與口袋妖怪API交談。
- > guzzlehttp/guzzle - 用於向CouchDB服務器提出請求。 >
- > Gregwar/Image - 用於調整口袋妖怪API返回的口袋妖怪精靈大小。
- vlucas/phpdotenv - 用於存儲配置值。 >
設置數據庫
>從瀏覽器中訪問Futon,並創建一個名為Pokespaing的新數據庫。創建後,進入數據庫中並創建一個新視圖。您可以通過單擊“視圖下拉”並選擇臨時視圖來做到這一點。在TextAarea中添加以下圖表功能:
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
完成後,單擊保存為按鈕,將口袋妖怪作為設計文檔的名稱,然後by_name作為視圖名稱。按ON保存以保存視圖。稍後,您將使用此視圖根據用戶輸入的內容建議口袋妖怪名稱。
該設計文檔利用GeoCouch提供的空間功能。它要做的第一件事是檢查文檔中是否有LOC字段。 LOC場是一個包含特定位置的坐標的數組,其中的第一個項目包含緯度,第二個項目包含經度。如果該文檔符合此條件,則使用EMIT()函數,就像普通視圖一樣。關鍵是一個geojson幾何形狀,值是一個包含口袋妖怪和精靈名稱的數組。
# 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
>向設計文檔提出請求時,需要指定具有JSON數組格式的start_range和end_range。每個項目可以是數字或零項目。如果您想要開放範圍,則使用零。這是一個示例請求:
及其輸出:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
如果您想了解更多有關GeoCouch可以執行哪些特定操作的信息,請務必閱讀文檔或Wiki。
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
>現在您已經準備好編寫一些代碼了。首先,您要查看後端的代碼,然後轉到前端代碼。
oke進口商
>該應用需要一些口袋妖怪數據才能在數據庫中使用,因此需要僅在本地執行的腳本。在項目目錄的根部創建一個poke-importer.php文件,並添加以下內容:
><span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
此腳本向Pokemon API的Pokedex端點提出了請求。此端點需要您希望它返回的Pokedex版本的ID。由於當前只有口袋妖怪GO允許玩家從第一代捕獲口袋妖怪,因此將2作為ID提供。這將返回原始口袋妖怪遊戲的關東地區的所有口袋妖怪。然後循環瀏覽數據,提取所有必要的信息,保存精靈,並使用提取的數據製作新文檔。
路由
>打開src/doutes.php文件,並添加以下路由:
# 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
>家庭控制器
在SRC目錄下,創建一個應用程序/控制器文件夾,然後在內部創建一個homecontroller.php文件。這將執行每條路線所需的所有操作。這是代碼:
>家庭控制器使用通過構造函數傳遞的$渲染器來渲染應用程序的主頁。它還使用您將在短期內創建的DB類。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
>與Couchdb
交談>在應用程序目錄下創建一個utils/db.php文件。打開文件並創建一個類:
>在班上,創建一個新的guzzle客戶端。您正在使用Guzzle,而不是用於CouchDB的一些PHP客戶
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
config來自項目根部的.env文件。這包含couchdb的基本URL。
<span>curl localhost:5984 </span>
> searchPokemon負責返回自動符號功能使用的數據。由於CouchDB實際上並不支持您在SQL中使用的類似條件,因此您使用了一些駭客來模仿它。這裡的訣竅是使用start_key和end_key,而不是僅返回精確匹配的鍵。 FFF0是在基本多語言平面末端分配的特殊Unicode字符之一。這使其成為在搜索實際字符串結束時附加附加的良好候選者,這使得其餘的字符由於其高價值而成為可選的。請注意,此hack僅適用於簡短的單詞,因此足以搜索口袋妖怪名稱。
<span>curl 192.168.33.10:5984 </span>
> SavePokeMonLocation保存Google Map Marker當前指向的坐標以及名稱和精靈。還添加了DOC_TYPE字段,以輕鬆檢索與位置相關的所有文檔。
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
> iSvalidCoordinates檢查緯度和經度值是否具有有效的格式。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
fetchpokemons是向您之前創建的空間搜索的設計文檔請求的功能。在這裡,您將西南坐標指定為start_range和東北坐標的值作為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
> handleresponse將couchdb返回的JSON字符串轉換為數組。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
最後,將家用控制器注入容器中。您可以通過打開src/depentencies.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>
>
中的> javascript
>對於主JavaScript文件(public/js/main.js),首先創建用於存儲值的變量,您將需要在整個文件中需要。
><span>curl 192.168.33.10:5984 </span>
>為用戶想要添加的PIN點位置創建標記。然後,添加一個事件偵聽器,用於打開模式以添加標記時添加位置:
初始化搜索框:
<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>
fetchpokemon函數負責獲取以前在地圖當前可查看區域中繪製的口袋妖怪。
<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>
這是用於添加用於輸入口袋妖怪名稱的文本字段的自動挑戰功能的代碼。指定RenderItem函數以自定義用於渲染每個建議的HTML。這使您可以將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>
創建一個public/css/styles.css文件,並添加以下樣式:
固定Couchdb
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
默認情況下,CouchDB向所有人開放。這意味著,一旦您將其暴露於互聯網,任何人都可以在數據庫中造成破壞。任何人都可以通過簡單地使用Curl,Postman或任何其他用於提出HTTP請求的工具來執行任何數據庫操作。實際上,這個臨時狀態甚至有一個名稱:“管理方”。您已經在上一個教程中看到了這一點,即使您更早地創建了一個新的數據庫,視圖和設計文檔。所有這些操作只能由服務器管理員執行,但是您已經繼續進行並完成了登錄或任何內容。還不說服嗎?嘗試在本地計算機上執行此操作:
>如果您在CouchDB安裝上還沒有服務器管理員:
<span>curl localhost:5984 </span>
yikes,對嗎?好消息是一個簡單的修復。您要做的就是創建服務器管理員。您可以使用以下命令進行操作:
<span>curl 192.168.33.10:5984 </span>
上面的命令創建一個名為“ kami”的新服務器,並使用密碼“ mySuperSecurePassword”。
<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>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
>
<span>function(doc){ </span> <span>if(doc.doc_type == 'pokemon'){ </span> <span>emit(doc.name, null); </span> <span>} </span><span>} </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
好,就是這樣嗎?好吧,這並不是因為您唯一完成的是只能由服務器管理員完成的限制數據庫操作。這包括創建新數據庫,刪除數據庫,管理用戶,對所有數據庫(包括系統表),對所有文檔的CRUD操作的全部訪問。這會讓您擁有未經身份驗證的用戶仍然有能力在任何數據庫上做CRUD的事情。您可以通過登錄Futon來嘗試一下,選擇要弄亂的數據庫並在其中做CRUD的工作。 CouchDB仍然會為您愉快地執行這些操作。
>那麼,如何修補剩餘的孔?您可以通過創建設計文檔來完成此操作,該文檔將檢查試圖執行寫操作(插入或更新)的用戶的用戶名與允許這樣做的用戶的名稱相同。在Futon中,使用服務器管理員或數據庫管理帳戶登錄,選擇要使用的數據庫,然後創建一個新的設計文檔。將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
>該文檔的新版本,現有文檔和用戶上下文作為參數傳遞給此功能。您唯一需要檢查的是包含數據庫名稱,執行操作的用戶名的名稱以及分配給用戶的一系列角色的userctx。
>由於您僅檢查用戶名,因此您可能會認為攻擊者可以簡單地猜測用戶名並為密碼提供任何價值,並且它將起作用。好吧,不是真的,因為CouchDB首先檢查設計文檔甚至執行之前的用戶名和密碼是否正確。 如果您想了解有關如何保護CouchDB的更多信息,請務必查看以下資源: >讓我們結束該應用程序以使用應用於數據庫的安全措施。首先更新.ENV文件:僅使用IP地址和端口更改base_uri,然後添加您創建的CouchDB用戶的用戶名和密碼。
>
>如何記錄口袋妖怪產生位置? >我可以使用Pokemon Spawn位置數據來預測未來的產卵嗎? >我如何使用Pixelmon mod查找生成位置? > theorshare Pokemon Go Map是什麼?它如何工作? >
或者,如果您在一個數據庫中有很多用戶,也可以檢查角色。下面的功能將向任何沒有“ Pokemon_master”角色的用戶丟棄錯誤。
保護應用程序
<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
您在項目中使用CouchDB嗎?做什麼的?有什麼建議 /功能可以添加到我們這個小項目中嗎?在評論中讓我們知道! >
> Pokemon GO中的Biome是什麼,它如何影響Spawn Locations? >口袋妖怪GO中的生物群落是一個特定的地理區域,它影響那裡的口袋妖怪產卵類型。例如,水型口袋妖怪更有可能在水體附近產卵,而基層的口袋妖怪更有可能在公園或森林中產生。了解不同的生物群落可以幫助您預測某些類型的口袋妖怪可能產生的位置。
您可以使用各種方法記錄Pokemon Spawn位置。一種方法是使用CouchDB之類的數據庫存儲口袋妖怪產卵的位置。這涉及使用Pokemon GO API檢索產卵數據,然後將此數據存儲在CouchDB中。然後,您可以使用此數據來分析產卵模式並預測未來的生成位置。
>
是否存在與使用第三方應用程序或網站查找口袋妖怪產卵位置有關的風險?這些服務可能違反口袋妖怪GO服務條款,並可能導致禁令。此外,這些服務可能並不總是提供準確或最新的信息。
Minecraft的Pixelmon mod允許您找到遊戲中的口袋妖怪產卵位置。該mod包含一個功能,該功能在地圖上顯示了口袋妖怪的產卵位置。您可以使用此功能在遊戲中查找和捕獲口袋妖怪。
Tenorshare Pokemon Go Map是第三方服務這提供了口袋妖怪產卵位置的地圖。該地圖是實時更新的,其中包括有關產卵及其確切位置的口袋妖怪類型的信息。但是,請注意,使用此服務可能會違反Pokemon GO的服務條款,並且可能會導致禁令。
>我如何使用Pogomap網站查找Pokemon Spawn Locations? Pogomap網站提供了口袋妖怪產卵位置的地圖。該地圖是實時更新的,其中包括有關產卵及其確切位置的口袋妖怪類型的信息。您可以使用此網站在您所在的地區找到並捕獲口袋妖怪。 >我可以為Pogomap網站做貢獻嗎?
是的,您可以通過報告Pokemon Spawn Locations來為PogoMap網站做出貢獻。這有助於使地圖保持最新和準確。但是,請注意,報告虛假信息可能會導致網站禁令。 >是否還有其他方法可以查找口袋妖怪產生位置? 是的,還有其他用於查找Pokemon Spawn的方法位置。例如,您可以加入當地的Pokemon GO社區或論壇,玩家共享有關生成位置的信息。您還可以使用附近的遊戲中的功能來查找靠近您當前位置的口袋妖怪。
以上是如何使用CouchdB創建口袋妖怪Spawn位置錄音機的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

HTTP請求方法包括GET、POST、PUT和DELETE,分別用於獲取、提交、更新和刪除資源。 1.GET方法用於獲取資源,適用於讀取操作。 2.POST方法用於提交數據,常用於創建新資源。 3.PUT方法用於更新資源,適用於完整更新。 4.DELETE方法用於刪除資源,適用於刪除操作。
