>
钥匙要点该项目的完整源代码可在GitHub上获得。
如果您没有设置良好的,孤立的开发环境,建议您使用宅基地改进。>
盒子没有安装CouchDB,因此您需要手动执行此操作;但不只是普通的couchdb。该应用需要与GEO数据(纬度和纵向)一起工作:您将为CouchDB提供来自Google Maps的边界框信息。边界框表示当前正在地图中显示的区域,并且所有先前的坐标用户都将添加到该区域的区域也将显示在地图上。 CouchDB默认无法做到这一点,这就是为什么您需要安装称为GeoCouch的插件以给Couchdb给一些空间超级大国。
最简单的方法是通过Geocouch Docker容器的方式。您也可以尝试手动安装Geocouch,但它要求您从源安装CouchDB并手工配置。除非您有Unix胡须,否则我真的不会推荐这种方法。
继续将Docker安装到您正在使用的VM中,然后在完成后返回这里。
首先,克隆回购并在创建的目录中导航。
<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>
>
>您将使用细长的框架来加快应用程序的开发。使用作曲家创建一个新项目:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
>从浏览器中访问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>
>现在您已经准备好编写一些代码了。首先,您要查看后端的代码,然后转到前端代码。
>该应用需要一些口袋妖怪数据才能在数据库中使用,因此需要仅在本地执行的脚本。在项目目录的根部创建一个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
>家庭控制器
>家庭控制器使用通过构造函数传递的$渲染器来渲染应用程序的主页。它还使用您将在短期内创建的DB类。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
>与Couchdb
交谈>在班上,创建一个新的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文件(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>
固定Couchdb
<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>
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中文网其他相关文章!