如何使用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传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
