
Pythonã§ããŒãéæŸããŠã¿ã ïœUPnPã§ããã°ã©ã ããããŒãæäœ GUIã®ããŸãã€ãïœ
- å²åŒãã
â»æ¬èšäºã¯æåŸã®é ç®ã®äžéšä»¥å€ç¡æã§ã
ããã«ã¡ã¯Rcatã§ãã
仿Žã§ãããããŒãéæŸã®èªååã«ã€ããŠæžãããšæããŸãã仿Žãšããã®ã¯ã ãã¶åã«ããã°ã©ã ã ãæžããŠããŠè¡šã«åºããŠããªãã£ããšããæå³ã§ãã
ãšããããã§ãä»åã¯UPnPã䜿ã£ãŠããŒãéæŸãè¡ã£ãŠãããŸãã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
æŠèŠ
çããupnpã£ãŠèããããšãããŸããïŒ
調ã¹ãŠã¿ããšãŠãããŒãµã«ãã©ã°ã¢ã³ããã¬ã€ã®ç¥ã¿ããã§ãã
ãã§äœãã§ããã®ãšèšããšããŒãéæŸãã§ããŸãã
ããã䜿ãã¡ãªãããšããŠã¯ã以äžã®ãããªããšãæããããŸãã
ã«ãŒã¿ãŒèšå®ç»é¢ã«å ¥ããªããŠãããŒãéæŸãã§ãã
èªåãªã®ã§å¿ èŠãªæã«éããŠäžèŠãªæã¯éãããšèšã£ãããšã楜ã«ã§ãã
ããã°ã©ã ã«çµã¿èŸŒãã§ããµãŒããŒã®ç«ã¡äžããšããŒãã®éæŸãèªååã§ãã

ããŒãã®èšå®ã¯ãçžæå
ãèµ·åããŠããªããšæå³ããªãã®ã§ãåºæ¬çã«éãã£ã±ãªãã§ãå®è³ªç©ºããŠãªãã®ã§åé¡ã¯ãªãã§ãããç¥ããªããã¡ã«ãã®ããŒãã§åŸ
ã¡åããŠãããéããŠããŸããŸãã
äŸãã°ããã®åŸSSLèšŒææžã®èªåæŽæ°ããã°ã©ã ãæžãããã«ãããŒã80çªãèªåçã«éãéãããããšèããŠããŸãããšãããããã®ããã«åŸ©ç¿ãå
ŒããŠãã®èšäºãæžããŠããŸãã
ãããããããã«å
容ãå€ãããã®ã§ãä»åããã°ã©ã ãæžãçŽãããšã«ããŸããã
é åžããŒã«ã®äœ¿ãæ¹
ããŠãä»åããã°ã©ã ã®æ¹ãäœãçŽããŸããã®ã§ãäœ¿ãæ¹ãå
ã«èª¬æããŠãããŸãã
äœ¿ãæ¹ã2éããããguiã§èª°ã§ãç°¡åã«äœ¿ããæ¹æ³ãšã¢ãžã¥ãŒã«ãšããŠã€ã³ããŒãããä»ã®ã¹ã¯ãªããããåç
§ããæ¹æ³ããããŸãã
åäœç°å¢
ããã°ã©ã èšèª:Python
Windows/Linuxã§åäœç¢ºèªæžã¿
GUIã¯Windowsã®ã¿ç¢ºèª
å ±éèšå®ç°å¢æ§ç¯
ãŸãæåã«ç°å¢æ§ç¯ãããŸãããšã¯èšã£ãŠãã©ã€ãã©ãªã2ã€ã€ã³ã¹ããŒã«ããã ãã§ãã
Pythonã£ãŠäœïŒã©ã€ãã©ãªã£ãŠäœ?ãšããåããŠã®æ¹ã¯ããŸãã¯ä»¥äžã®èšäºãåèã«Pythonã®å°å
¥ãããŠãã ããã
æ¬äœã¯èªåç°å¢æ§ç¯å¯Ÿå¿ã§ã
guiã§äœ¿ãå Žåã¯æ¯è»ããŒã¯ã®Start.batãèµ·åããã ãã§OKã§ãã
ååã®ã¿èµ·åã«æ°åç§æéãããããŸãã
ã©ã€ãã©ãªããããªãpywã®æ¹ãããã«ã¯ãªãã¯ã§ãããã§ãã

Linuxã§ã¯ä»ã®ã¹ã¯ãªããããåç
§ããã ãããšããããšã§ãç°å¢æ§ç¯ç³»ã¯å
¥ããŠããŸããã
å¿
èŠãªã©ã€ãã©ãªã¯requirementsã確èªããŠãã ãããrequestsã ãã§åããšã¯æããŸãã
ããŒãéæŸã¢ããªã®äœ¿ãæ¹(GUIã§ãµã¯ããšäœ¿ã)
ãã®ã»ã¯ã·ã§ã³ã§ã¯GUIãèµ·åããŠã誰ã§ãç°¡åã«äœ¿ããæ¹æ³ã玹ä»ããŸãã
äžã®æ¹ã§è©±ããŸãããããã§ã«ç°å¢æ§ç¯ã®æç¹ã§ãã®ç»é¢ãç«ã¡äžãã£ãŠããã®ã§ã¯ãªãã§ããããã

åé ç®ã®èšå®
ãã¹ã
ãã®ããã°ã©ã ãç«ã¡äžããŠããã³ã³ãã¥ãŒã¿ãŒã®IPã¢ãã¬ã¹ã§ãã
èªåçã«å ¥åãããã®ã§å€æŽããªããŠå€§äžå€«ã§ããæå¹æé
0ãšå ¥åããã°ç¡éã«éãã£ã±ãªãã§ããèªåã§éããå¿ èŠããããŸãã
åã§æ°åãå ¥åããå Žåã¯ãã®æéã§åæã«éããŸããããŒãçªå·
éãããããŒãçªå·ãå ¥åããŠãã ããã
äŸãã°ãã€ã¯ã©ãªã25565ã§ãããã¢ãŒã
éæŸãééãã§éžã¹ãŸãã
æå¹æéãèšå®ããŠããªãå Žåã¯ãçµãã£ããééãããŠãã ããã
èšå®ãçµãã£ããå®è¡ãã¿ã³ãæŒãããšã§æäœã§ããŸãã
ãªãããããã¯ãŒã¯ç°å¢ã«ããããŸãåããªãå ŽåããããŸããå人ã®ç°å¢ã®åé¡ãªã®ã§ãµããŒãã¯ã§ããŸããã®ã§ãäºæ¿ãã ããã
ããŒãéæŸããã°ã©ã ã®äœ¿ãæ¹(ã¢ãžã¥ãŒã«ãšããŠäœ¿ã)
次ã®ã»ã¯ã·ã§ã³ã§ã¯ã¢ãžã¥ãŒã«ãšããŠã€ã³ããŒãããããšã§ã€ã³ã¿ãŒããªã¿ãŒãã䜿ã£ãããä»ã®ããã°ã©ã ã«çµã¿èŸŒãæ¹æ³ã玹ä»ããŸãã
äœ¿ãæ¹
ç°å¢ãæ§ç¯ãã
2ã€ã®ã©ã€ãã©ãªãå¿ èŠã§ãã
Windowsã§ã¯requestsã®ã¿ãLinuxã§ã¯ipgetã远å ã§å¿ èŠã§ããæ¬ã¹ã¯ãªãããã¢ãžã¥ãŒã«ãšããŠã€ã³ããŒããã
䜿ããããã©ã«ãã®äžã«å ¥ããŠããã¡ã€ã«åã§ã€ã³ããŒãããŠãã ãããã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹ãã
ã¯ã©ããã®ååã¯"UPnPPortOpen"ã§ãã奜ããªå€æ°ã«å¯ŸããŠã€ã³ã¹ã¿ã³ã¹ããŠãã ãããããŒãéæŸãå®è¡ãã
"PortControl"ã¡ãœããã䜿ã£ãŠã³ã³ãããŒã«ãè¡ããŸããåŒæ°ã¯ä»¥äžã®éãã§ãã
ããŒãçªå·ã ããå¿ é ã§ããã以å€ã¯ä»»æã§ããPortnum
éãããããŒãçªå·ãå¿ é ã§ããHost
ã¯ã©ã€ã¢ã³ãã®IPã¢ãã¬ã¹ãèªåã§èšå®ãããŸããProtocol
ããã©ã«ãã¯"TCP"ã§ãã
udpãéããå Žåã¯æç€ºçã«æå®ããŠãã ãããMode
ããŒããéæŸãããééãããåäœãéžæããŸãã
ããã©ã«ãã¯"open"ã§ãã
ãã以å€ã®æååãå ¥åãããšéããããã«åäœããŸããTime
éæŸã®ç¶ç¶æéãèšå®ããŸããããã©ã«ãã¯0ã§ç¡éã§ãã
çæéã ãéããŠãããªãããããèšå®ããŠããã°éããæéããããŸããã
(venv) R:\Python\Network\UPNP\MSearch2>py
Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct 2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import M_search2 as ms
>>> upnp = ms.UPnPPortOpen()
>>> upnp.PortControl(80,Time=5)
æäœã«æåããŸãã
True
>>> upnp.PortControl(80,Mode="close")
ã³ã³ãããŒã«URLã¢ã¯ã»ã¹ãšã©ãŒãã³ãŒã:500
False
>>> upnp.PortControl(80,Time=30)
æäœã«æåããŸãã
True
>>> upnp.PortControl(80,Mode="close")
æäœã«æåããŸããå®éã«äœ¿ããšãããªæãã§ãã
äžããã€ã³ããŒããã€ã³ã¹ã¿ã³ã¹ãéæŸãšããé çªã§è¡ã£ãŠããŸãã
æåã®éæŸã¯5ç§éãªã®ã§ã5ç§ä»¥äžçµã£ãŠããéããããšããã®ã§ãšã©ãŒã«ãªã£ãŠããŸãããã€ãŸãèªåã§éãããšããããšã§ãã
次ã«å°ãé·ãããŠãã30ç§ä»¥å
ã«ã¯ããŒãºãè¡ããŸããæäœã«æåããã®ã§æåã§éãããšããããšã§ãã
Linuxã§å€±æããå Žå
ãšã©ãŒã¡ãã»ãŒãžã以äžã®å Žåããã¡ã€ã¢ãŠã©ãŒã«ã«ãããã¯ãããŠããããšããããŸãã
äœã£ãåŸããã£ãšã¡ã€ã³ã®Linuxã§è©Šããæã«å
šç¶åããªããŠçŠããŸããã
ã«ãŒã¿ãŒãèŠã€ãããŸããã§ãã
ã«ãŒã¿ãŒã®ãã±ãŒã·ã§ã³ãååŸã§ããŸããã§ãã
åå ã§ãããufwã«æãã£ãããããã¯ãããŠããŸããã
ãã®ã³ãã³ãã§ãã°ãèŠãŠãããã¯ãããã£ãŠããã°ufwã®ããã§ãã
tail /var/log/ufw.log
Sep 7 02:22:25 rcat-Green-G5 kernel: [1220117.272885] [UFW BLOCK] IN=enp1s0 OUT= MAC=000000 SRC=192.168.0.1 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2è§£æ±ºæ¹æ³ã§ããã1900çªãéãããã«ããã°ããããšæã£ãã®ã§ããããªããéããªãâŠã
æçµçã«IPã¢ãã¬ã¹ã§èš±å¯ã«ããŸããã
ã¡ãªã¿ã«1900çªãéããæç¹ã§ä»ã®æ©åšã¯åŒã³ãããããšå¿çãããã®ã§ãããã©ã«ãã²ãŒããŠã§ã€ã ãå€ãªæ±ããªã®ããªïŒ
ãŸããããŒã«ã«IPã¢ãã¬ã¹ãªã®ã§æ·±ãæ°ã«ããªãã§èšå®ããããšã«ããŸãã
sudo ufw allow from 192.168.0.1Linuxã§ããã€ã¹åãéãå Žå
ãã®ããŒã«ã䜿ãã«ã¯èªåã®IPã¢ãã¬ã¹ãå¿
èŠã§ããWindowsã¯ç°¡åã«ååŸã§ããã®ã§ãããLinuxã¯ããããããªãã®ã宿
ã§ãã
å
éšã§èªåçã«ååŸããããã«ã¯ããŠããŸãããããŸãå
¥æã§ããªãå ŽåããŸãæåã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹æã«çŽæ¥å
¥åããŠããŸããšããæ¹æ³ããããŸãã

ãèªèº«ã®ããã°ã©ã ã®äžã§æé©ãªIPã¢ãã¬ã¹ã®ååŸæ¹æ³ãæ€èšãã以äžã®ãããªåœ¢ã§æž¡ããŠãã ããã
ããããããšã§IPã¢ãã¬ã¹ãæž¡ãããã®ã«ãªã£ãŠããããšãããããŸãã
>>> import M_search2 as ms
>>> upnp = ms.UPnPPortOpen("192.168.0.4")
>>> upnp.MyIP
'192.168.0.4'ããŒããéæŸãããœãŒã¹ã³ãŒã解説
ããããå
ã¯ããã°ã©ã çãªè©±ãæ°ã«ãªãæ¹åãã§ãã
ãŸã解説ãšèšã£ãŠãã ãã¶åã®ããšãªã®ã§ãããŸãèŠããŠãªããã§ããâŠã
ãœãŒã¹ã³ãŒããèŠããš4幎以äžåã§ããã
ãšããããã§ãªããã¡ã¯ã¿ãªã³ã°ããªããæãåºãã€ã€è§£èª¬ããŠãããŸãã
M-Searchã§ã«ãŒã¿ãŒãæ¢ã
ãŸãæåã«ãããŒãéæŸã¯ã«ãŒã¿ãŒã«å¯Ÿããèšå®ãªã®ã§ããŸãã¯ã«ãŒã¿ãŒãèŠã€ããå¿
èŠããããŸããããã«ã¯M-Searchã䜿ããŸãã
ããïŒãã®ååã©ã£ãã§ãã¿ãŸãããã
å®ã¯ä»¥äžã®ESP32ãæ€çŽ¢ããã®èšäºã§æžããŠãŸãã
ããã®å
ãã¿ãå®ã¯ä»åã®ããŒãéæŸã ã£ããããŸãã
詳ããã¯ä»¥äžã®èšäºã§æžããŠããŸããããããã¯ãŒã¯å
šäœã«åŒã³ãããŠç¹å®ã®ããã€ã¹ã«å¿çããŠããããšãããã®ã§ãã
ä»åã¯ã«ãŒã¿ãŒã«åºãŠãããããšå£°ããããŸãã
ããŠããããã«4幎åã«æžãããœãŒã¹ã³ãŒãããã®ãŸãŸæãã®ã¯ã¡ãã£ãšããªã®ã§ãæžãçŽãããã®ã§è§£èª¬ããŸãã
ãããã«ãã®ææã«ãªããšããªãã§ããããæžãæ¹ãããã®ãã£ãŠããããã³ãã©ãããå€ãããŠããŸããŸããã
ãŸãã¯ã«ãŒã¿ãŒãæ€çŽ¢ããã³ãŒãã§ãã
ãã®é¢æ°ã«å¯ŸããŠæ€çŽ¢ãããµãŒãã¹ãæž¡ãããšã§å¿çãåŸãããšãã§ããŸãã
ãã®èŸºã«é¢ããŠã¯äžã®èšäºã§ç޹ä»ããŠããã®ã§ã现ããããšã¯çããŸãã

ã¡ãªã¿ã«ãã®é¢æ°ã¯å€±æãããšæ°ååŒã³åºãããŸãã
ãšããã®ãäžã§è¡ã£ãŠãããµãŒãã¹ãšããã®ãã¡ãŒã«ãŒã«ãã£ãŠéãããšãããããã§ãã
ãããã§èª¿ã¹ããšãããä»ã®ãšãã2çš®é¡ããããšãããã£ãŠããã®ã§ã以äžãæž¡ãããŸãã
RouterServiceList = ['urn:schemas-upnp-org:service:WANIPConnection:1','urn:schemas-upnp-org:service:WANPPPConnection:1']ãã±ãŒã·ã§ã³ãååŸãã
ãããã«ãŒã¿ãŒããå¿çãããã°å ã«é²ã¿ãŸããæ¬¡ã«å¿ èŠãªã®ã¯ãã±ãŒã·ã§ã³ã§ããããã«ã¢ã¯ã»ã¹ããããšã§ãã«ãŒã¿ãŒãæäŸããŠããã³ã³ãããŒã«URLãååŸããããšãã§ããŸãã
ã«ãŒã¿ãŒã®æ€çŽ¢ãããã±ãŒã·ã§ã³ã®ååŸãŸã§ã¯ä»¥äžã®é¢æ°ã«ãŸãšããããŠããŸãã4è¡ç®ã§ãµãŒã颿°ãåŒã³åºãããŠããŸããã

ã¡ãªã¿ã«ãµãŒã颿°ã ãåãããšä»¥äžã®ããã«ãªããŸãã
ãããã«ãŒã¿ãŒããã®å¿çã«ãªããŸããä»åã«é¢ããŠã¯ã©ã£ã¡ã®ãµãŒãã¹åã§ãåå¿ããããšãåãããŸããã
ãã±ãŒã·ã§ã³ã®éšåã¯LOCATIONã«æžããŠãããŸãã
äžã®é¢æ°ã§ã¯æ£èŠè¡šçŸã§ãããåŒã£æããŠããŸãã
>>> r = m.Search("urn:schemas-upnp-org:service:WANPPPConnection:1")
>>> r
'HTTP/1.1 200 OK\r\nCACHE-CONTROL: max-age=120\r\nST: urn:schemas-upnp-org:service:WANPPPConnection:1\r\nUSN: uuid:8cd::urn:schemas-upnp-org:service:WANPPPConnection:1\r\nEXT:\r\nSERVER: TP-Link/TP-LINK UPnP/1.1 MiniUPnPd/1.8\r\nLOCATION: http://192.168.0.1:1900/rootDesc.xml\r\nOPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01\r\n01-NLS: 1\r\nBOOTID.UPNP.ORG: 1\r\nCONFIGID.UPNP.ORG: 1337\r\n\r\n'
>>> print(r)
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
ST: urn:schemas-upnp-org:service:WANPPPConnection:1
USN: uuid:8cd::urn:schemas-upnp-org:service:WANPPPConnection:1
EXT:
SERVER: TP-Link/TP-LINK UPnP/1.1 MiniUPnPd/1.8
LOCATION: http://192.168.0.1:1900/rootDesc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 1
BOOTID.UPNP.ORG: 1
CONFIGID.UPNP.ORG: 1337
>>> r = m.Search("urn:schemas-upnp-org:service:WANIPConnection:1")
>>> print(r)
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
ST: urn:schemas-upnp-org:service:WANIPConnection:1
USN: uuid:8cd::urn:schemas-upnp-org:service:WANIPConnection:1
EXT:
SERVER: TP-Link/TP-LINK UPnP/1.1 MiniUPnPd/1.8
LOCATION: http://192.168.0.1:1900/rootDesc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 1
BOOTID.UPNP.ORG: 1
CONFIGID.UPNP.ORG: 1337èŠãŠãããéããã±ãŒã·ã§ã³ã¯"http://192.168.0.1:1900/rootDesc.xml"ãšãªããŸãã
ã³ã³ãããŒã«URLãååŸãã
次ã«ããŒãéæŸã®æç€ºãåºãããã®cgiã®URLãååŸããŸãã
å
ã»ã©ååŸãããã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŠã¿ãŸãã
ããèŠãŠãããããªãã§ããã

調ã¹ããšããã«ãããšããµãŒãã¹ã¿ã€ããäžèŽããŠãããšããã®ã³ã³ãããŒã«URLã«ã¢ã¯ã»ã¹ãããšã®ããšã§ããã
確ãã«M-Searchã§äœ¿ã£ããµãŒãã¹åããããŸããã

ãšããããã§ãã®xmlããã³ã³ãããŒã«URLãæãåºã颿°ããã¡ãã
xmlãè§£æããããã®ã©ã€ãã©ãªãããã¿ãããªã®ã§ãããã䜿ã£ãŠãµãŒãã¹ã¿ã€ããäžèŽãããšããã®ã³ã³ãããŒã«URLãæãåºããŠããŸãã

æçµçã«ã³ã³ãããŒã«URLã"192.168.0.1:1900/ctl/Conn"ã§ããããšãããããŸãã
ãããŸã§ã§æ
å ±åéã¯çµããã§ãããã£ãšã§ããã
åŸã¯ãã®æ
å ±ããã£ãã·ã¥ãšããŠä¿åããŠãããªã©ã工倫ããŠããã°ã次å以éã¯ãã®æé ã¯ã¹ãããã§ãããã§ããã
ããŒãéæŸæç€ºãåºã
ããŠãåœæã®ããŒãéæŸã¹ã¯ãªãããã²ã©ãããã®ã§ãããå®å
šã«æžãçŽããŠãŸãã
ã¡ãã£ãšé·ãã®ã§ã¯ã¿åºãŠãéšåã¯DLã§ãé¡ãããŸãã
äžã®æ¹ã®æ°è¡ã¯å
ã»ã©ãã£ãŠãæ
å ±åéã§ããã

調ã¹ããšããã«ãããšãã³ã³ãããŒã«URLã«å¯ŸããŠSOAPãšãã圢åŒã®ãªã¯ãšã¹ãããã£ãéãä»ããããšã§ããŒãéæŸãè¡ããã¿ããã§ãã
xml圢åŒã®ããã£ã§ãã®äžã«éãããããŒãããããã³ã«ãã¯ã©ã€ã¢ã³ãã®IPã¢ãã¬ã¹ãéæŸæéãªã©ãå
¥ããŸãã
æ¹è¡ã³ãŒããå³å¯ã«æ±ºããããŠããã¿ãããªã®ã§ãæ¹è¡ã®éšåã¯ãªã¹ãã«ããŠåŸã§ãžã§ã€ã³ããŠãŸãã
ãã®äžèº«ãéæŸãšééã§è¥å¹²ç°ãªãã®ã§ããªã¹ããå°ããã€äœãããšã§åå²ãå
¥ããŠããŸãã
ãªã¯ãšã¹ãããããŒã«ãå°çšã®ã¢ã¯ã·ã§ã³ãããã¿ããã§ãã詳ããã¯ããŠã³ããŒãã
åºæ¥äžãã£ãããªã¯ãšã¹ãã©ã€ãã©ãªã§POSTããã°ãªãã±ãŒã§ãã
ããŸãããã°ã¹ããŒã¿ã¹ã³ãŒã200ãè¿ã£ãŠããã®ã§ãã¬ã¹ãã³ã¹ã®OK屿§ãTRUEã«ãªãã¯ãã§ãã
確èªãã
æ£åžžã«æäœã§ããããšã確èªããŠãçŽåŸã«ã«ãŒã¿ãŒç®¡çç»é¢ãã確èªãããšãããªã£ãŠãŸããã
èšå®ç»é¢ã®upnpã¯ã©ã€ã¢ã³ãã®éšåã§ããã¡ããšä»åãªã¯ãšã¹ãããããŒãéæŸãè¡ãããŠããŸãã
SOAPã®äžã§æžãã説æã®éšåããã¡ããšåæ ãããŠããã®ã§ãä»åã®å®éšã®ãªã¯ãšã¹ããæ£åžžã«åŠçãããŠããããšãããããŸãã
ã¡ãªã¿ã«30ç§ã«èšå®ããã®ã§æŸã£ãŠãããŠã30ç§ã§ããŒããéããŸãã
å°å³ã«ãã䟿å©ãªãã§ãããã

é©åœã«å®ããŠã¢ã³ãããããããã€ããŠããã«ãŒã¿ãŒè²·ã£ããã§ãããèšå®ç»é¢ãããããã§ãããããâŠã
ã¡ãªã¿ã«ã«ãŒã¿ãŒç®¡çç»é¢ã¯ã¡ãŒã«ãŒã«ãã£ãŠæãã£ããéãã®ã§ãç§ã«èãããŠãããããŸãããããç³»ã®ã³ã¡ã³ãã¯åãä»ããŸããã®ã§ãäºããäºæ¿ãã ããã
ããã°ã©ã ã®é åž
ä»å補äœããMSearch&ããŒãéæŸããŒã«ã¯ä»¥äžã®URLããé åžããŠããŸãã
ããŠã³ããŒãããã«ã¯å©çšèŠçŽåæãã¹ã¯ãŒãã®ã»ãã«ãææåºéã§é瀺ãããããŒã¯ãŒãã¯å¿ èŠã§ãã