ç§ã¯ç§ã®æå¡ã®ããã«ã©ã®ããã«SMSã¢ã©ãŒããè¡ã£ãããã話ãããããšæããŸãã
ç§ã¯
ã¹ã±ãžã¥ãŒã«ã®å€æŽã远跡ã§ããªãã£ãããã«ãååã®ã°ã«ãŒããã¯ã©ã¹ã«è¡šç€ºãããªãã£ããšããäºå®ããããå°ããªã¹ãã£ã³ãã«ããããŸããã ãã®æ¥ãç§ã¯åãVkããŒãžããSMSã¢ã©ãŒããäœæãããšããã¢ã€ãã¢ãæãã€ããŸããã
ã¯ããç§ã¯ãã®ããã®ç¹å¥ãªãµãŒãã¹ãããããšãç¥ã£ãŠããŸãããããã¯ããŸãã«ãç°¡åã§ã...
åæ çãªäœè«
ç§ã¯LinuxãPhythonãããã³SqlãåããŠã§ããããã®èšäºã¯ãLearn to Learnãã®ååã«åºã¥ããŠæžãããŠããŸãã
ã§ããããäœãåé¡ããã£ããšããŠãããŸãæã£ããããã«ãã³ã¡ã³ãã«ã³ã¡ã³ããæžããŠãã ããã
ã©ãããå§ããŸããïŒ
å°ãèããŠãç§ã¯å¿ èŠãªãã®ãå®çŸããŸããïŒ
- VkããŒãžã§æ°ããæçš¿ãã¹ãã£ã³ããŸã
- ãããã®åãæçš¿ã§ãã°ã«ãŒããžã®åç §ãæ€çŽ¢ããŸãïŒäŸïŒ143ïŒ
- ã°ã«ãŒãã®çªå·ãæçš¿ã«èŠã€ãã£ãå Žåããã®æçš¿ããã®ã°ã«ãŒãã®æºåž¯é»è©±ã«éä¿¡ããŸã
Debianã«ã¯ããŒã ããµãŒããŒããããããããèªãããã«GrindelServerãšåŒãã§ããŸããããã«åºã¥ããŠãããããã¹ãŠå®è£ ããã€ããã§ããã
ã³ãã³ãã©ã€ã³ããSMSãéä¿¡ããæ¹æ³ãåã«åŠã¶ããšããå§ããããšã«ããŸããã ãã®ãããHuawei E1150ã®3Gã¢ãã ã3å°ã»ã©ããããã®ãã¡ã®1å°ã䜿çšããããšã«ãªããŸããã Googleã¯ãã®ãããã¯ã«é¢ããè³æãç°¡åã«èŠã€ããŸããã èŠããã«ã ã¢ãã ããã¢ãã ã®ã¿ãã¢ãŒãã«åãæ¿ã㊠ïŒãã®ããããŸã åœã®CDãã©ã€ããšã«ãŒããªãŒããŒãæã£ãŠããïŒãGnokiiãŸãã¯Gammuããã°ã©ã ãèšå®ããŠåäœãããå¿ èŠããããŸããã
ã¬ã³ã ãŒãéžã³ãŸãã...
ã¬ã
Gammuã§ç°¡åã ã£ããšã¯èšããŸããããçµå±ã¯ãã¹ãŠããŸããããŸããã
Debianã®ã€ã³ã¹ããŒã«ã¯æšæºã§ãïŒ
$ sudo apt-get install gammu
ããŒãžã§ã³1.28.0ãã€ã³ã¹ããŒã«ãããŠããŸã
Gammu configïŒ/ etc / gammurc
ã¢ãã ã¯éåžžã/ dev / ttyUSB0ãttyUSB1ãttyUSB2ãšããŠå®çŸ©ãããŸãã ttyUSB0ãå¿ èŠã§ã
æ§æã«è¿œå ããã ãã§ã
[gammu] port= /dev/ttyUSB0 connection = at
Connectinonã¯æ¥ç¶ã®äžçš®ã§ã
ããã ãã§ãïŒ ãã®åŸã確èªã§ããŸã
$ sudo gammu --identify
ã®ãããªãã®ãäžããå¿ èŠããããŸã
: /dev/ttyUSB0 Manufacturer : huawei : unknown (E1550) Firmware : 11.608.12.00.143 IMEI : 123456789101112 SIM (IMSI) : 123456789098765
ããã«åé¡ã¯ãªãã¯ãã§ãããåé¡ãããã°ãåžžã«
$ man gammu
ãšGoogleããããŸãã
ã³ã³ãœãŒã«ããã®æåã®SMS
ãŸããã¢ãã ã䜿çšããæš©éãèšå®ããå¿ èŠããããŸãããããã¯ãã®äŸã§ã®ã¿å¿ èŠãªã®ã§ãåèµ·ååŸã«ãªã»ããããããšããäºå®ãå¿é ããå¿ èŠã¯ãããŸããã
$ sudo chmod 777 /dev/ttyUSB0
ä»ãSIMã«ãŒããã¢ãã ã«æ¿å ¥ãããŠããŠããéãããã°ãSMSãéä¿¡ã§ããŸã
äŸïŒ
$ sudo echo " Grindel" | gammu sendsms TEXT +79811111111 -unicode
SMSéä¿¡èªåå
ãã®å Žåã®gammuããã±ãŒãžã¯æ€èšŒã«ã®ã¿å¿ èŠã§ããããåŸã§gammu-smsdããŒã¢ã³ã䜿çšããŸããã
圌ã¯ããŒã¿ããŒã¹ããSMSã¡ãã»ãŒãžãéä¿¡ããæ¹æ³ãç¥ã£ãŠããŸãïŒè©³çŽ°ã«ã€ããŠã¯gammu Webãµã€ãã§èªãããšãã§ããŸããã æ°ããããŒãžã§ã³ãããã«èšèŒãããŠããããšã«æ³šæããŠãã ããïŒã
ç§ãã¡ã¯çœ®ããŸãïŒ
$ sudo apt-get install gammu-smsd
æ§æ/ etc / gammu-smsdrc
[gammu] port = /dev/ttyUSB0 connection = at [smsd] # service = MYSQL host = localhost logfile = /var/log/gammu-smsd # user = smsd password = password # pc = localhost # database = smsd
次ã«ãããŒã¹ãäœæããå¿ èŠããããŸãã
$ man gammu-smsd-tables
ã§ã¯ãå¿ èŠãªããŒã¿ããŒã¹ã®ãã³ãã¯
docs/sql/mysql.sql
ã«ãããšèšãããŠããŸãããããã°ã©ã ãœãŒã¹ã調ã¹ãå¿ èŠããããšç解ããŠããã®ã§ãããããããŠã³ããŒãããåŸïŒããŒãžã§ã³1.28.0ïŒãã¢ãŒã«ã€ãã解åããŠå¿ èŠãªãã®ãèŠã€ããããšãã§ããŸãsqlã¹ã¯ãªããããããŠphpMyAdminãªã©ã䜿çšããŠãä»»æã®äŸ¿å©ãªæ¹æ³ã§å ¥åããŸãïŒèª°ããããåççãªæ¹æ³ãææ¡ããããç§ã¯å¬ããã§ãïŒïŒ
ããããã¹ãŠã®ã¹ãããã®åŸãããŒã¢ã³ãåèµ·åããŸãã
$ sudo /etc/init.d/gammu-smsd restart
泚æïŒ
gammu-smsd
å®è¡ããåŸã
gammu --identify
ã¯ãšã©ãŒã
gammu --identify
ãŸãããããã¯æ£åžžã§ãïŒ
mysqlçµç±ã§SMSãéä¿¡ãã
$ man gammu-smsd-tables
ããã®ã³ãŒãã¯åãphpMyAdminã§å®è¡ã§ããŸã
INSERT INTO outbox ( DestinationNumber, TextDecoded, CreatorID, Coding ) VALUES ( ' ', 'This is a SQL test message', 'Program', 'Default_No_Compression' );
åçã¯æ¬¡ã®ãšããã§ã
- DestinationNumberã¯ãSMSãå°éããçªå·ã§ã
- TextDecoded-æ¥ãã¯ãã®ããã¹ã
- CreatorIDã¯ãã©ã®ããã»ã¹ããã®æçš¿ãäœæãããã瀺ãåãªãã¿ã°ã§ã
- ã³ãŒãã£ã³ã°-ãšã³ã³ãŒããSMSãè±èªã®å Žåã¯ãDefault_No_Compressionãã瀺ããããã·ã¢èªã®å Žåã¯ãUnicode_No_Compressionãã瀺ãããŸãã
泚æïŒ SMSã«éä¿¡ã§ããã®ã¯ãã©ãã³æå160æåãšããªã«æå70æåã ãã§ãïŒ ããå€ãã®ããã¹ããéä¿¡ããããã«ãããã«ãããŒãSMSãããããŸãã Gammu-smsdã¯ãããã®éä¿¡ããµããŒãããŠããŸããããã»ã¹ã¯
$ man gammu-smsd-tables
説æãããŠããŸã
VKããŒãžããã§ãã¯ããããã°ã©ã ãæžã
æ£çŽãªãšãããç§ã¯å®å šã«éæ¹ã«æ®ãããã®ãããªããã°ã©ã ãæžããããšã¯ãããŸããã§ãããç§ã®ããã°ã©ãã³ã°çµéšã¯ãã¹ãŠãTurbo PascalåŠæ ¡ãšå°ããªjsãããžã§ã¯ããBart Chalkboard Generatorãã«éãããŠããŸããïŒãããã¡ã€ã«ã«ãããŸãïŒã
ç§ã¯ã©ã®èšèªãéžæãããããç¥ããŸããã§ããã QïŒAã§è³ªåããããšã«ããŸããã
g0ldenãšavalakã®åçãã©ããããããšãïŒ
ãã®çµæãç§ã¯Pythonãéžæãã Codecademy㧠PythonãåŠã³å§ããŸããã 䞊è¡ããŠãç§ã¯Pythonã§VK APIã䜿çšããŠäœæ¥ãå®è£ ããæ¹æ³ãæ¢ããŠããŸããã ãããŠãHabréã§èŠã€ããŸãããdzhioevã«æè¬ããŸãïŒ ãŸããç§ã¯ãã£ãããšVK APIãæ±ãå§ããŸããã èªç±æéã®ç 究ã®ããã«ãæ®ãã¯ã»ãšãã©ãªããç§ã¯éåžžã«ãã£ãããšé²ã¿ãŸããã
Pythonã«å€å°ãªããšãæ £ããŠããã®ã§ïŒCodecademyã§ãªã¹ããèŸæžã«ã¢ã¯ã»ã¹ããŸããïŒãèªåã§ã¹ã¯ãªãããæžãå§ããæºåãã§ããŠãããšå€æããŸããã
ãŸããã¢ããªã±ãŒã·ã§ã³ãåäœããVKontakteããŒãžãç»é²ããããšããå§ããã¢ããªã±ãŒã·ã§ã³ãç»é²ããå¿ èŠããããŸããã ããã¯éåžžã«åçŽã§ã VKontakteã®ããã¥ã¡ã³ãã«èšèŒãããŠãããããããã«ã€ããŠã¯èª¬æããŸããã
ã¹ã¯ãªãã解æ
ç°¡åã«èª¬æãããšãã¹ã¯ãªããã®ã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ã¯æ¬¡ã®ãšããã§ãã
- ããã°ã©ã ã«ãã£ãŠæåŸã«éä¿¡ãããæçš¿ã®IDã調ã¹ã
- æåŸã®æ皿以éã«æ°ããæçš¿ã衚瀺ãããŠãããã©ããã確èªããŸã
- æ°ããæçš¿ã®ããããã§å°ãªããšã1ã€ã®ã°ã«ãŒããèŠã€ããŠãã ããã
- ã°ã«ãŒãçªå·ãèŠã€ãã£ãå Žåã¯ãã°ã«ãŒãçªå·ã§SMSãéä¿¡ããŸãïŒã€ãŸããsmsdããŒã¿ããŒã¹ã®éä¿¡ãã¬ã€ããŒãã«ã«ç¹å®ã®ã¬ã³ãŒããéä¿¡ããŸãïŒ
ããŒã¿ããŒã¹ã«ã€ããŠèª¬æãã䟡å€ããããŸãã VsPostsããã³GroupsããŒãã«ãsmsdããŒã¿ããŒã¹ã«è¿œå ããŸããã VkPostsã§ã¯ãããã°ã©ã ã«ãã£ãŠéä¿¡ããããã¹ãŠã®æçš¿ã®IDãè¿œå ãããããã次åãããããææ°ã®éä¿¡ãããæåŸã®æçš¿ã®IDãèŠæ±ã§ããŸãã ãããŠã°ã«ãŒãã«ã¯ãåŠççªå·ãšã°ã«ãŒãçªå·ããããŸãã æ°ã
ä»ãã¹ã¯ãªããèªäœã¯æççã§ã
å¿ èŠãªã¢ãžã¥ãŒã«ãæ¥ç¶ããŸã
import vk_auth import json import urllib2 from urllib import urlencode import MySQLdb import logging import time import re
ããŒã¹ãžã®æ¥ç¶ãåæåããkrakozyabrãååšããªãããã«ãšã³ã³ãŒããèšå®ããŸã
db = MySQLdb.connect(host="localhost", user=" ", passwd="", db="smsd") cursor = db.cursor() db.set_character_set('utf8') cursor.execute('SET NAMES utf8;') cursor.execute('SET CHARACTER SET utf8;') cursor.execute('SET character_set_connection=utf8;')
vk_authã¢ãžã¥ãŒã«ã®authé¢æ°ã䜿çšããŠãvk apiãŠãŒã¶ãŒåããã¹ã¯ãŒããã¢ããªã±ãŒã·ã§ã³çªå·ããªã¯ãšã¹ãæš©éãéç¥ããŸã ãã¢ãžã¥ãŒã«ã¯ããããååŸãããããšãæãåºããŠãã ãã ã
token, user_id = vk_auth.auth(login, password, "3139526", "groups,wall")
ããŒã¯ã³å€æ°ã§ã¢ããªã±ãŒã·ã§ã³ããŒã¯ã³ãååŸããuser_idã§ãããŒã¿ãå ¥åããããŠãŒã¶ãŒã«ç§»åããŸãã
次ã«ãããã«ããã€ãã®å€æ°ãå®çŸ©ããŸã
cursor.execute("SELECT postID FROM VKposts ORDER BY VKposts.number DESC LIMIT 0 , 1;") # id lastSendedPostId = cursor.fetchall()[0][0] # LastSendedPostId groupId = -123456 # Id , id vkapi id cursor.execute("SELECT DISTINCT `group` FROM `groups`") # rawGroups = cursor.fetchall() groups = [] for rawGroup in rawGroups: groups.append(rawGroup[0])
ããã°ã©ã ã®äž»èŠéšå
post = call_api("wall.get", [("owner_id", groupId), ("count", "1")], token)[1] # if post['id'] > lastSendedPostId and post['date'] > actualTime: # Id Id , , logging.info('I have found some new posts!') i = 0 while post['id'] > lastSendedPostId and post['date'] > actualTime: # if not len(post) > 1: # break post['text'] = post['text'].replace('<br>', ' ') # for group in groups: # if len(re.findall("(^| )" + str(group) + "( |$)", post['text'])) != 0: # "(^| )" + + "( |$)" logging.info("I have found %s group in %s post" % (group, post['id'])) cursor.execute("SELECT `tel` FROM `groups`WHERE `group`=%s;" % (group)) # rawTels = cursor.fetchall() tels = [] for rawTel in rawTels: tels.append(rawTel[0]) for tel in tels: # if len(post['text']) > 70: # 70 cursor.execute("INSERT INTO outbox(DestinationNumber, Coding, TextDecoded, CreatorID, Class)VALUES ('%s', 'Unicode_No_Compression', ' vk.com/wall%s_%s', 'Python', '-1')" % (tel, groupId, post['id'])) sendedPosts.insert(0, post['id']) # Id logging.info("Send Cuted %s post to %s****" % (post['id'], tel[0:8])) else: # cursor.execute("INSERT INTO outbox(DestinationNumber, Coding, TextDecoded, CreatorID, Class)VALUES ('%s', 'Unicode_No_Compression', '%s', 'Python', '-1')" % (tel, post['text'])) sendedPosts.insert(0, post['id']) # Id logging.info("Send %s post to %s****" % (post['id'], tel[0:8])) i += 1 post = call_api("wall.get", [("owner_id", groupId), ("offset", i), ("count", "1")], token)[1] #
å°ããªé害ããããŸãã æçš¿ã®ããã¹ãã70æåãè¶ ããå Žåã代ããã«ãããªãã®ã¹ã±ãžã¥ãŒã«ãå€æŽãããŸããã+æçš¿ãžã®ãªã³ã¯ãéä¿¡ããŸãã70æåãè¶ ããæåã¯1ã€ã®ããªã«SMSã«åãŸããªãããã§ãïŒäžèšïŒãããŸã ãã«ãããŒãSMSãããããŸããã
logging.infoã¯ãã³ãŒãã®æåã«èšå®ããããã°æ©èœã®æ©èœã§ãã
logging.basicConfig(format='%(asctime)s | %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p', filename='/home/NetDisk/sms/smslog.log',level=logging.DEBUG)
ããã ãã§ãïŒ ããã¿ãå®è¡å¯èœã«ããããã«æ®ããŸã
$ sudo chmod +x
ãããŠãå¿ èŠãªééã§Cronã«è¿œå ããŸãã
ããããgammuãšäžèšã®ãã¹ãŠã®å¯èœæ§ã¯ããã§çµããã§ã¯ãããŸããã ã ãã空æ³ã
èšç»äž
- åŠçããŒã¿ããŒã¹ã®åé
- Webã€ã³ã¿ãŒãã§ãŒã¹ã®äœæ
- ãããŠããããçš®é¡ã®ããããªããšãšãã£ããã£
ãœãŒã¹
- gammuã®èšå®ã«é¢ããŠå€ãã®äºæãä¿®æ£ããããããããããGoogleãšgammuã®äººéã«ãªãã§ãããã
- VZ APIã§èªèšŒçšã®ã¢ãžã¥ãŒã«ãäœæããŠããŸã ãdzhioevã«åã³æè¬ããŸã ã
- VK API ããã¥ã¡ã³ã
- ãããŠãGoogleã®ããããªããšã®æã
PS
ç§ã¯ãããã®ãã¹ãŠã®æŽ»åã«éåžžã«èå³ãããããã®ã¢ã€ãã¢ã«å®å šã«é äºãããŸãããããããã¹ãŠè¡ãããšãã§ããŠå匷ã§ããããšãå¬ããæããŸããããå¿ ãããç°¡åã§ã¯ãããŸããã§ãã
èªãã§ãããŠããããšãã楜ããã§ãããããããªïŒ
ããªãã®ã¢ã€ãã¢ã§é 匵ã£ãŠãã ããïŒ
ããã§ãœãŒã¹ãååŸã§ããŸã ã