ホームページ バックエンド開発 PHPチュートリアル thinkphp に基づいて、ユーザーの IP に基づいて地理的位置を特定し、対応する気象情報を提供するアプリケーションが実装されています。

thinkphp に基づいて、ユーザーの IP に基づいて地理的位置を特定し、対応する気象情報を提供するアプリケーションが実装されています。

Jun 13, 2016 pm 12:22 PM
gt info lt quot

ユーザーの IP に基づいて地理的位置を特定し、対応する天気情報を提供する thinkphp ベースのアプリケーション

多くの Web サイトがユーザーに天気予報を提供する機能を提供していることは誰もが知っています。当社に関連する地理的位置情報については、同じ Web サイトで地理的位置を特定し、地理的位置を特定するために IP を使用することも考えられます。自分で開発する場合は、確かに面倒な点が 1 つあります。そのため、このアプリケーションのビジネス ロジックについて簡単に説明します (ユーザーが初めてページを開いたときから始まります)。

1: IP を取得:私の言葉では、IP には 2 つのタイプがあり、1 つは実際に存在する独立した IP、もう 1 つはルーターによって割り当てられた IP です。もちろん、両方の IP を考慮する必要があります。 1 つ目は $_SERVER の要素の値を取得するのは簡単ですが、問題は 192.168.1.1 などを判断することができないため、ユーザーの位置を取得する方法がありません。情報を取得するために元々はcurl拡張子が使用されていましたが、この拡張子は何を意味するのでしょうか? 使用できないため、この状況は一旦脇に置き、ユーザーが独自のIPを使用してアクセスする状況のみを考慮します。

2: IP を取得したら、IP アドレス データベースに基づいてユーザーの IP の場所を見つける必要があります。ここで注意すべき点が 2 つあります。1: IP アドレス データベースは utf-8 でエンコードされている必要があります。 : または、情報は完全な住所情報であり、都市名局が後で必要になるため、文字列をインターセプトするか、都市の住所を簡略化する必要があります。

3: ユーザーの住所の取得は明らかに機能しません。考えてみてください。データを取得するために最終的に天気インターフェースに接続されるのは都市コードです。ここでは、まだ変換する必要があります。暴力的な方法を使って街を横断したり、街のコードを入手したりしました。

4: 都市コードを取得したら、データ インターフェイスに接続してデータを取得する必要があります。このデータは json データであり、ここで取得したものはオブジェクトである可能性があります。特定の状況が詳細に分析され、最も重要なのはこれらのデータが実際にこのオブジェクトであることが後で判明しました。これはコードの移植に役立ちます。

5: ビュー内のテンプレートで割り当てられたデータを呼び出す、これは可能だと思います。

6: 実際、上記の手順で、初めてページを開くビジネス ロジック全体がすでに処理されています。もう 1 つは、都市名を入力して都市をクエリする機能をユーザーに提供していることです。ユーザーの入力情報を取得する通常の方法は都市名です。

7: 都市名はすでに取得されているか、ここで直接トラバースに参加できます。都市コードを取得します。ここには非常に重要な論理的問題があります。これら 2 つの機能をうまく組み合わせることができる順序と方法は次のとおりです。

まず、システムが都市名を自動的に取得するかどうかを判断します。空でない場合は、都市名のみが取得されます。それ以外の場合は、IP アドレスが連続している直下にある必要があることに注意してください。構造体を使用して、ユーザーの入力が空かどうかを判断します。空でない場合は、都市名をユーザーの入力にします。つまり、ユーザーの入力権限は、システムによって自動的に取得される権限より大きい必要があります。さらに、IP を取得する方法と都市名を抽出する方法を 2 つ作成しました。


上記の記述は少し面倒です。この場合、以下はさまざまなセキュリティと著作権上の理由により、データ インターフェイスが処理されています。私によるものであり、メソッドのリファレンスのみを提供するため、貼り付けることは役に立たず、独自の研究を行うことはできません。

weather_test.html の表示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset="><title>天气预报</title><style type="text/css">	*{	margin: 0px;	padding: 0px;	}</style></head><body><br><form action="{$smarty_const.__SELF__}" method="post">	<input type="text" name="cityname">	<input type="submit" value="更换城市"/></form>	<table border="1px" style="margin-top: 20px;margin-left: 20px;">			<tr><td colspan="2">即时天气信息</td></tr>		<tr style="border-spacing: 0px; padding: 0px;">			<td style="border-spacing: 0px; padding: 0px;">城市</td>			<td>{$all_info->forecast->city}</td>		</tr>		<tr>			<td>基本天气</td>			<td>{$all_info->realtime->weather}</td>		</tr>		<tr>			<td>温度</td>			<td>{$all_info->realtime->temp}</td>		</tr>		<tr>			<td>风向</td>			<td>{$all_info->realtime->WD}</td>		</tr>		<tr>			<td>更新时间</td>			<td>{$all_info->realtime->time}</td>		</tr>	</table>		<table border="1px" style="margin-top: 20px;margin-left: 20px;">			<tr><td colspan="2">生活建议</td></tr>		<tr style="border-spacing: 0px; padding: 0px;">			<td style="border-spacing: 0px; padding: 0px;">城市</td>			<td>{$all_info->forecast->city}</td>		</tr>		<tr>			<td>防嗮建议</td>			<td>{$all_info->index[0]->details}</td>		</tr>		<tr>			<td>穿衣建议</td>			<td>{$all_info->index[1]->details}</td>		</tr>		<tr>			<td>运动建议</td>			<td>{$all_info->index[2]->details}</td>		</tr>		<tr>			<td>洗车建议</td>			<td>{$all_info->index[3]->details}</td>		</tr>		<tr>			<td>晾晒建议</td>			<td>{$all_info->index[4]->details}</td>		</tr>		<tr>			<td>更新时间</td>			<td>{$all_info->realtime->time}</td>		</tr>	</table>		<table border="1px" style="margin-top: 20px;margin-left: 20px;">		<tr><td colspan="5">未来四天天气信息  城市: {$all_info->forecast->city}</tr>		<tr style="border-spacing: 0px; padding: 0px;">			<td>项目/日期</td>			<td>今天</td>			<td>明天</td>			<td>后天</td>			<td>大后天</td>		</tr>		<tr>			<td>概况</td>			<td>{$all_info->forecast->weather1}</td>			<td>{$all_info->forecast->weather2}</td>			<td>{$all_info->forecast->weather3}</td>			<td>{$all_info->forecast->weather4}</td>		</tr>		<tr>			<td>温度</td>			<td>{$all_info->forecast->temp1}</td>			<td>{$all_info->forecast->temp2}</td>			<td>{$all_info->forecast->temp3}</td>			<td>{$all_info->forecast->temp4}</td>		</tr>		<tr>			<td>风向</td>			<td>{$all_info->forecast->wind1}</td>			<td>{$all_info->forecast->wind2}</td>			<td>{$all_info->forecast->wind3}</td>			<td>{$all_info->forecast->wind4}</td>		</tr>		<tr>			<td>风力</td>			<td>{$all_info->forecast->fl1}</td>			<td>{$all_info->forecast->fl2}</td>			<td>{$all_info->forecast->fl3}</td>			<td>{$all_info->forecast->fl4}</td>		</tr>	</table>		<table border="1px" style="margin-top: 20px;margin-left: 20px;">		<tr><td colspan="2">今日空气质量状况</td></tr>		<tr style="border-spacing: 0px; padding: 0px;">			<td style="border-spacing: 0px; padding: 0px;">城市</td>			<td>{$all_info->forecast->city}</td>		</tr>		<tr>			<td>PM2.5</td>			<td>{$all_info->aqi->pm25}</td>		</tr>		<tr>			<td>PM10</td>			<td>{$all_info->aqi->pm10}</td>		</tr>		<tr>			<td>SO2</td>			<td>{$all_info->aqi->so2}</td>		</tr>		<tr>			<td>NO2</td>			<td>{$all_info->aqi->no2}</td>		</tr>		<tr>			<td>更新时间</td>			<td>{$all_info->aqi->pub_time}</td>		</tr>	</table></body></html>
ログイン後にコピー
クラス メソッド:

public function weather_test(){		require_once './Component/Citycode.php';		//////这里是根据客户端的ip判断地理位置		//定义两个标志变量		$count=0;		$city_id='101120301';//默认大淄博		$city_name_cin=$_POST['cityname'];		$city_sim_name=R('Test/get_user_cityname');		//这是系统根据ip自动判断的位置		echo $city_sim_name;		if($city_sim_name!=null){			$city_name_cin=$city_sim_name;		}		//这是用户输入的位置		if(!empty($_POST['cityname'])){			//放置信息覆盖			$city_name_cin=$_POST['cityname'];		}		////////不管是ip定位还是用户输入最终需要遍历获取城市代码的变量只要$city_name_cin		foreach ($citycode as $key => $value){			if($key==$city_name_cin){				$city_id=$citycode[$city_name_cin];				$count++;			}		}		if($count==0){			echo "对不起,您输入的地址没有找到!默认淄博哦";		}else{			echo $city_name_cin."的天气信息如下";		}		//接口已经处理,请勿使用,仅供学习		$weather_interface_url="http://weatherai.markt.xiaomi.com/wtr-v2/weather?cityId=".$city_id."&mei=e32c88633283737f5d9f381d47&device=HM2013023&miuiVersion=JHBCNBD16.0&modDevice=ce=miuiWeatherAp";		$all_weather_info = json_decode(file_get_contents($weather_interface_url));		//分配数据		$this->assign("all_info",$all_weather_info);		$this->display();	}	///////////////////////////////////////////////////	/*	 * 下面两个分别是获取主机ip和ip所在地的两个	 * 方法,最后的结果数值通过R方法,返回获取	 */	//方法1:获取用户ip	public function get_user_ip(){		//先通过这种简单的方法获取主机的ip,通过R方法获取		$host_ip=$_SERVER['SERVER_ADDR'];
ログイン後にコピー
 		return $host_ip;	}	//方法2:获取地名	public function get_user_cityname(){		//得到用户的ip		$host_ip=R('Test/get_user_ip');		//这里ip地址库必须这样实例化		$Ip = new \Org\Net\IpLocation('UTFWry.dat'); // 实例化类 参数表示IP地址库文件		//可以同时放ip和域名		$area = $Ip->getlocation($host_ip); // 获取域名服务器所在的位置		$city_allname=$area['country'];		$sim_cityname=explode("市",explode("省", $city_allname)[1])[0];		return $sim_cityname;	}
ログイン後にコピー



著作権に関する声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

watch4proとGTのどちらが優れていますか? watch4proとGTのどちらが優れていますか? Sep 26, 2023 pm 02:45 PM

Watch4proとgtはそれぞれ特徴や適用シーンが異なりますが、総合的な機能、高性能、スタイリッシュな外観を重視し、価格は高くてもいいという方にはWatch 4 Proの方が適しているかもしれません。高度な機能要件はなく、バッテリー寿命と手頃な価格を重視する場合は、GT シリーズの方が適しているかもしれません。最終的な選択は、個人のニーズ、予算、好みに基づいて決定する必要がありますが、購入する前に自分のニーズを慎重に検討し、さまざまな製品のレビューや比較を参照して、より情報に基づいた選択を行うことをお勧めします。

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 Mar 21, 2024 pm 10:31 PM

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 バッテリー寿命の延長はモバイル デバイス エクスペリエンスの鍵であり、iPad がその良い例です。 iPad のバッテリーの消耗が早すぎると感じても、心配しないでください。iPadOS 17.4 には、デバイスの実行時間を大幅に延長できるトリックや微調整が多数あります。この詳細なガイドの目的は、情報を提供するだけではなく、iPad の使用方法を変え、全体的なバッテリー管理を強化し、充電せずにデバイスをより長く使用できるようにすることです。ここで概説したプラクティスを採用することで、個人のニーズや使用パターンに合わせてテクノロジーをより効率的かつ意識的に使用するための一歩を踏み出すことができます。主要なエネルギー消費者を特定する

Microsoft は、Copilot を使用して Windows 11 23H2 ビルドをリリース プレビュー チャネルに展開しています Microsoft は、Copilot を使用して Windows 11 23H2 ビルドをリリース プレビュー チャネルに展開しています Sep 28, 2023 pm 07:17 PM

誰もが今日の Windows 1123H2 リリースを楽しみにしています。実際、Microsoft は、正式リリース段階に最も近いチャネルであるリリース プレビューのアップデートを開始したところです。ビルド 22631 として知られる Microsoft によると、ブランドを変更した新しいチャット アプリ、Phone Links、および Play Together ウィジェットを展開しており、これらは過去数か月間他の社内チャネルでテストされてきました。 「この新しい更新プログラムは、Windows 11 バージョン 22H2 と同じサービス ブランチとコード ベースを持ち、Windows の Copilot (プレビュー) を含む、新しく発表されたすべての機能と累積的になります」と Microsoft は約束しています。レドモンド関係者はさらに

请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 Jun 13, 2016 am 10:24 AM

请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?那么请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?http://127.0.0.1/myo/newuser.php?mod=search&type=fastone比如现在我要修改mod=new要怎么做呢?------解决方案--------------------发送了请求

See all articles