Python 은 어떻게 위 챗 공식 번호 의 글 과 평론 을 얻 습 니까?(Fiddler 캡 처 분석 을 바탕 으로)
위 챗 공식 번 호 는 비교적 오 르 기 어 려 운 플랫폼 중 하나 라 고 생각 하지만 한바탕 고생 한 후에 도 작은 수확 을 거 두 었 다.스 크 래 피 를 사용 하지 않 았 지만 뒤 에는 실전 을 정리 해 쓰기 시작 했다.이번 개발 환경 을 간단하게 소개 합 니 다.
이번 실전 에 서 는 잡 은 공중 번 호 는 제한 이 없 지만,공중 번 호 는 잡 을 때마다 분석 해 야 한다.Fiddler 를 열 고 관련 에이 전 트 를 설정 합 니 다.간섭 이 너무 많 지 않도록 Fiddler 에 필터 규칙 을 추가 합 니 다.위 챗 도 메 인 이름 mp.weixin.qq.com 만 지정 하면 됩 니 다.
Fiddler 설정 필터 규칙
평소에 관심 을 가 지 는 대중 번호 도 비교적 많 습 니 다.이번 실전 은'36 크립톤'대중 번 호 를 예 로 들 어 계속 내 려 다 보 겠 습 니 다.
"36 크립톤"공중 번호
공중 번호 오른쪽 상단->모든 메시지
공중 번호 홈 페이지 에서 오른쪽 상단 에 세 개의 옹 골 진 원점 이 있 습 니 다.메시지 인터페이스 에 들 어가 기 를 클릭 하고 내 려 가서'모든 메시지'를 클릭 합 니 다.아래 에 역사 글 을 몇 번 불 러 오 라 고 요청 한 다음 에 Fiddler 인터페이스 로 돌아 갑 니 다.의외 의 사고 가 발생 하지 않 으 면 이 몇 번 의 요청 을 볼 수 있 습 니 다.돌아 오 는 데 이 터 는 json 형식 입 니 다.동시에 글 데 이 터 는 json 문자열 로 geneal 에 정의 되 어 있 습 니 다.msg_list 필드 중:
공식 글 목록 패키지 요청
분석 글 목록 인터페이스
요청 URL 과 쿠키 를 붙 여 분석 하기:
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzI2NDk5NzA0Mw==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=QhOypNwH5dAr5w6UgMjyBrTSOdMEUT86vWc73GANoziWFl8xJd1hIMbMZ82KgCpN&wxtoken=&appmsg_token=971_LwY7Z%252BFBoaEv5z8k_dFWfJkdySbNkMR4OmFxNw~~&x5=1&f=json
Cookie: pgv_pvid=2027337976; pgv_info=ssid=s3015512850; rewardsn=; wxtokenkey=777; wxuin=2089823341; devicetype=android-26; version=26070237; lang=zh_CN;pass_ticket=NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy;wap_sid2=CO3YwOQHEogBQnN4VTNhNmxQWmc3UHI2U3kteWhUeVExZHFVMnN0QXlsbzVJRUJKc1pkdVFUU2Y5UzhSVEtOZmt1VVlYTkR4SEllQ2huejlTTThJWndMQzZfYUw2SldLVGVMQUthUjc3QWdVMUdoaGN0Nml2SU05cXR1dTN2RkhRUVd1V2Y3SFJ5d01BQUF+fjCB1pLcBTgNQJVO
다음은 중요 한 매개 변 수 를 설명 하 겠 습 니 다.언급 하지 않 은 설명 은 그리 중요 하지 않 습 니 다.좀 귀 찮 지 않 습 니까?대규모 전문 파충류 가 아니 기 때문에 하나의 대중 번호 만 이렇게 분석 하면 계속 할 수 있 습 니 다.캡 처 한 json 데 이 터 를 붙 여 글 데이터 표를 디자인 할 수 있 습 니 다.
{
"ret": 0,
"errmsg": "ok",
"msg_count": 10,
"can_msg_continue": 1,
"general_msg_list": "{\"list\":[{\"comm_msg_info\":{\"id\":1000005700,\"type\":49,\"datetime\":1535100943,\"fakeid\":\"3264997043\",\"status\":2,\"content\":\"\"},\"app_msg_ext_info\":{\"title\":\" : , \",\"digest\":\" 。\",\"content\":\"\",\"fileid\":100034824,\"content_url\":\"http:\\/\\/mp.weixin.qq.com\\/s?__biz=MzI2NDk5NzA0Mw==&mid=2247518479&idx=1&sn=124ab52f7478c1069a6b4592cdf3c5f5&chksm=eaa6d8d3ddd151c5bb95a7ae118de6d080023246aa0a419e1d53bfe48a8d9a77e52b752d9b80&scene=27#wechat_redirect\",\"source_url\":\"\",\"cover\":\"http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/QicyPhNHD5vYgdpprkibtnWCAN7l4ZaqibKvopNyCWWLQAwX7QpzWicnQSVfcBZmPrR5YuHS45JIUzVjb0dZTiaLPyA\\/0?wx_fmt=jpeg\",\"subtype\":9,\"is_multi\":0,\"multi_app_msg_item_list\":[],\"author\":\" \",\"copyright_stat\":11,\"duration\":0,\"del_flag\":1,\"item_show_type\":0,\"audio_fileid\":0,\"play_url\":\"\",\"malicious_title_reason_id\":0,\"malicious_content_type\":0}}]}",
"next_offset": 20,
"video_count": 1,
"use_video_tab": 1,
"real_type": 0
}
원 하 는 데 이 터 를 간단하게 추출 할 수 있 습 니 다.여기 서 문장 표 구 조 를 다음 과 같이 정의 하고 표를 만 드 는 SQL 문 구 를 붙 일 수 있 습 니 다.문장 데이터 테이블
-- ----------------------------
-- Table structure for tb_article
-- ----------------------------
DROP TABLE IF EXISTS "public"."tb_article";
CREATE TABLE "public"."tb_article" (
"id" serial4 PRIMARY KEY,
"msg_id" int8 NOT NULL,
"title" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
"author" varchar(20) COLLATE "pg_catalog"."default",
"cover" varchar(500) COLLATE "pg_catalog"."default",
"digest" varchar(200) COLLATE "pg_catalog"."default",
"source_url" varchar(800) COLLATE "pg_catalog"."default",
"content_url" varchar(600) COLLATE "pg_catalog"."default" NOT NULL,
"post_time" timestamp(6),
"create_time" timestamp(6) NOT NULL
)
;
COMMENT ON COLUMN "public"."tb_article"."id" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."msg_id" IS ' id ( )';
COMMENT ON COLUMN "public"."tb_article"."title" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."author" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."cover" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."digest" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."source_url" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."content_url" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."post_time" IS ' ';
COMMENT ON COLUMN "public"."tb_article"."create_time" IS ' ';
COMMENT ON TABLE "public"."tb_article" IS ' ';
-- ----------------------------
-- Indexes structure for table tb_article
-- ----------------------------
CREATE UNIQUE INDEX "unique_msg_id" ON "public"."tb_article" USING btree (
"msg_id" "pg_catalog"."int8_ops" ASC NULLS LAST
);
요청 글 인 터 페 이 스 를 첨부 하고 데이터 베 이 스 를 분석 하 는 관련 코드:
class WxMps(object):
""" 、 """
def __init__(self, _biz, _pass_ticket, _app_msg_token, _cookie, _offset=0):
self.offset = _offset
self.biz = _biz #
self.msg_token = _app_msg_token # ( )
self.pass_ticket = _pass_ticket # ( )
self.headers = {
'Cookie': _cookie, # Cookie( )
'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 '
}
wx_mps = 'wxmps' # 、 、 ( )
self.postgres = pgs.Pgs(host='localhost', port='5432', db_name=wx_mps, user=wx_mps, password=wx_mps)
def start(self):
""" """
offset = self.offset
while True:
api = 'https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz={0}&f=json&offset={1}' \
'&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket={2}&wxtoken=&appmsg_token' \
'={3}&x5=1&f=json'.format(self.biz, offset, self.pass_ticket, self.msg_token)
resp = requests.get(api, headers=self.headers).json()
ret, status = resp.get('ret'), resp.get('errmsg') #
if ret == 0 or status == 'ok':
print('Crawl article: ' + api)
offset = resp['next_offset'] #
general_msg_list = resp['general_msg_list']
msg_list = json.loads(general_msg_list)['list'] #
for msg in msg_list:
comm_msg_info = msg['comm_msg_info'] #
msg_id = comm_msg_info['id'] # id
post_time = datetime.fromtimestamp(comm_msg_info['datetime']) #
# msg_type = comm_msg_info['type'] #
# msg_data = json.dumps(comm_msg_info, ensure_ascii=False) # msg
app_msg_ext_info = msg.get('app_msg_ext_info') # article
if app_msg_ext_info:
#
self._parse_articles(app_msg_ext_info, msg_id, post_time)
#
multi_app_msg_item_list = app_msg_ext_info.get('multi_app_msg_item_list')
if multi_app_msg_item_list:
for item in multi_app_msg_item_list:
msg_id = item['fileid'] # id
if msg_id == 0:
msg_id = int(time.time() * 1000) # id, id=0
self._parse_articles(item, msg_id, post_time)
print('next offset is %d' % offset)
else:
print('Before break , Current offset is %d' % offset)
break
def _parse_articles(self, info, msg_id, post_time):
""" """
title = info.get('title') #
cover = info.get('cover') #
author = info.get('author') #
digest = info.get('digest') #
source_url = info.get('source_url') #
content_url = info.get('content_url') #
# ext_data = json.dumps(info, ensure_ascii=False) #
self.postgres.handler(self._save_article(), (msg_id, title, author, cover, digest,
source_url, content_url, post_time,
datetime.now()), fetch=True)
@staticmethod
def _save_article():
sql = 'insert into tb_article(msg_id,title,author,cover,digest,source_url,content_url,post_time,create_time) ' \
'values(%s,%s,%s,%s,%s,%s,%s,%s,%s)'
return sql
if __name__ == '__main__':
biz = 'MzI2NDk5NzA0Mw==' # "36 "
pass_ticket = 'NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy'
app_msg_token = '971_Z0lVNQBcGsWColSubRO9H13ZjrPhjuljyxLtiQ~~'
cookie = 'wap_sid2=CO3YwOQHEogBQnN4VTNhNmxQWmc3UHI2U3kteWhUeVExZHFVMnN0QXlsbzVJRUJKc1pkdVFUU2Y5UzhSVEtOZmt1VVlYTkR4SEllQ2huejlTTThJWndMQzZfYUw2SldLVGVMQUthUjc3QWdVMUdoaGN0Nml2SU05cXR1dTN2RkhRUVd1V2Y3SFJ5d01BQUF+fjCB1pLcBTgNQJVO'
#
wxMps = WxMps(biz, pass_ticket, app_msg_token, cookie)
wxMps.start() #
분석 문장 평론 인터페이스평론 을 얻 는 사고방식 은 대체로 같 지만,단지 좀 더 번 거 로 울 뿐이다.먼저 핸드폰 터미널 에 댓 글 이 있 는 글 을 열 고 Fiddler 가 캡 처 한 요청 을 확인 합 니 다.
공중 호 문장 평론
공중 호 글 평론 인터페이스 패키지 요청
그 중의 URL 과 Cookie 를 추출 하여 재 분석:
https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&__biz=MzI2NDk5NzA0Mw==&appmsgid=2247518723&idx=1&comment_id=433253969406607362&offset=0&limit=100&uin=777&key=777&pass_ticket=NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy&wxtoken=777&devicetype=android-26&clientversion=26070237&appmsg_token=971_dLK7htA1j8LbMUk8pvJKRlC_o218HEgwDbS9uARPOyQ34_vfXv3iDstqYnq2gAyze1dBKm4ZMTlKeyfx&x5=1&f=json
Cookie: pgv_pvid=2027337976; pgv_info=ssid=s3015512850; rewardsn=; wxuin=2089823341; devicetype=android-26; version=26070237; lang=zh_CN; pass_ticket=NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy; wap_sid2=CO3YwOQHEogBdENPSVdaS3pHOWc1V2QzY1NvZG9PYk1DMndPS3NfbGlHM0Vfal8zLU9kcUdkWTQxdUYwckFBT3RZM1VYUXFaWkFad3NVaWFXZ28zbEFIQ2pTa1lqZktfb01vcGdPLTQ0aGdJQ2xOSXoxTVFvNUg3SVpBMV9GRU1lbnotci1MWWl5d01BQUF+fjCj45PcBTgNQAE=; wxtokenkey=777
다음 분석 매개 변수:Cookie:동상
def _parse_article_detail(self, content_url, article_id):
""" ,article_id id"""
try:
api = content_url.replace('amp;', '').replace('#wechat_redirect', '').replace('http', 'https')
html = requests.get(api, headers=self.headers).text
except:
print(' ' + content_url)
else:
# group(0) is current line
str_comment = re.search(r'var comment_id = "(.*)" \|\| "(.*)" \* 1;', html)
str_msg = re.search(r"var appmsgid = '' \|\| '(.*)'\|\|", html)
str_token = re.search(r'window.appmsg_token = "(.*)";', html)
if str_comment and str_msg and str_token:
comment_id = str_comment.group(1) # id( )
app_msg_id = str_msg.group(1) # id( )
appmsg_token = str_token.group(1) # token( )
이 인터페이스 에서 돌아 온 json 데 이 터 를 다시 보고 구 조 를 분석 한 다음 에 데이터 시트(SQL 포함)를 정의 합 니 다.글 리 뷰 데이터 시트
-- ----------------------------
-- Table structure for tb_article_comment
-- ----------------------------
DROP TABLE IF EXISTS "public"."tb_article_comment";
CREATE TABLE "public"."tb_article_comment" (
"id" serial4 PRIMARY KEY,
"article_id" int4 NOT NULL,
"comment_id" varchar(50) COLLATE "pg_catalog"."default",
"nick_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"logo_url" varchar(300) COLLATE "pg_catalog"."default",
"content_id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"content" varchar(3000) COLLATE "pg_catalog"."default" NOT NULL,
"like_num" int2,
"comment_time" timestamp(6),
"create_time" timestamp(6) NOT NULL
)
;
COMMENT ON COLUMN "public"."tb_article_comment"."id" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."article_id" IS ' id';
COMMENT ON COLUMN "public"."tb_article_comment"."comment_id" IS ' id';
COMMENT ON COLUMN "public"."tb_article_comment"."nick_name" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."logo_url" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."content_id" IS ' id ( )';
COMMENT ON COLUMN "public"."tb_article_comment"."content" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."like_num" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."comment_time" IS ' ';
COMMENT ON COLUMN "public"."tb_article_comment"."create_time" IS ' ';
COMMENT ON TABLE "public"."tb_article_comment" IS ' ';
-- ----------------------------
-- Indexes structure for table tb_article_comment
-- ----------------------------
CREATE UNIQUE INDEX "unique_content_id" ON "public"."tb_article_comment" USING btree (
"content_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
만리장정 이 곧 끝 날 것 입 니 다.마지막 으로 이 코드 를 붙 입 니 다.먼저 글 의 주 소 를 가 져 와 야 하기 때문에 위 에서 글 의 데 이 터 를 가 져 오 는 코드 와 함께 있 습 니 다.
import json
import re
import time
from datetime import datetime
import requests
from utils import pgs
class WxMps(object):
""" 、 """
def __init__(self, _biz, _pass_ticket, _app_msg_token, _cookie, _offset=0):
self.offset = _offset
self.biz = _biz #
self.msg_token = _app_msg_token # ( )
self.pass_ticket = _pass_ticket # ( )
self.headers = {
'Cookie': _cookie, # Cookie( )
'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 '
}
wx_mps = 'wxmps' # 、 、 ( )
self.postgres = pgs.Pgs(host='localhost', port='5432', db_name=wx_mps, user=wx_mps, password=wx_mps)
def start(self):
""" """
offset = self.offset
while True:
api = 'https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz={0}&f=json&offset={1}' \
'&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket={2}&wxtoken=&appmsg_token' \
'={3}&x5=1&f=json'.format(self.biz, offset, self.pass_ticket, self.msg_token)
resp = requests.get(api, headers=self.headers).json()
ret, status = resp.get('ret'), resp.get('errmsg') #
if ret == 0 or status == 'ok':
print('Crawl article: ' + api)
offset = resp['next_offset'] #
general_msg_list = resp['general_msg_list']
msg_list = json.loads(general_msg_list)['list'] #
for msg in msg_list:
comm_msg_info = msg['comm_msg_info'] #
msg_id = comm_msg_info['id'] # id
post_time = datetime.fromtimestamp(comm_msg_info['datetime']) #
# msg_type = comm_msg_info['type'] #
# msg_data = json.dumps(comm_msg_info, ensure_ascii=False) # msg
app_msg_ext_info = msg.get('app_msg_ext_info') # article
if app_msg_ext_info:
#
self._parse_articles(app_msg_ext_info, msg_id, post_time)
#
multi_app_msg_item_list = app_msg_ext_info.get('multi_app_msg_item_list')
if multi_app_msg_item_list:
for item in multi_app_msg_item_list:
msg_id = item['fileid'] # id
if msg_id == 0:
msg_id = int(time.time() * 1000) # id, id=0
self._parse_articles(item, msg_id, post_time)
print('next offset is %d' % offset)
else:
print('Before break , Current offset is %d' % offset)
break
def _parse_articles(self, info, msg_id, post_time):
""" """
title = info.get('title') #
cover = info.get('cover') #
author = info.get('author') #
digest = info.get('digest') #
source_url = info.get('source_url') #
content_url = info.get('content_url') #
# ext_data = json.dumps(info, ensure_ascii=False) #
content_url = content_url.replace('amp;', '').replace('#wechat_redirect', '').replace('http', 'https')
article_id = self.postgres.handler(self._save_article(), (msg_id, title, author, cover, digest,
source_url, content_url, post_time,
datetime.now()), fetch=True)
if article_id:
self._parse_article_detail(content_url, article_id)
def _parse_article_detail(self, content_url, article_id):
""" ,article_id id"""
try:
html = requests.get(content_url, headers=self.headers).text
except:
print(' ' + content_url)
else:
# group(0) is current line
str_comment = re.search(r'var comment_id = "(.*)" \|\| "(.*)" \* 1;', html)
str_msg = re.search(r"var appmsgid = '' \|\| '(.*)'\|\|", html)
str_token = re.search(r'window.appmsg_token = "(.*)";', html)
if str_comment and str_msg and str_token:
comment_id = str_comment.group(1) # id( )
app_msg_id = str_msg.group(1) # id( )
appmsg_token = str_token.group(1) # token( )
#
if appmsg_token and app_msg_id and comment_id:
print('Crawl article comments: ' + content_url)
self._crawl_comments(app_msg_id, comment_id, appmsg_token, article_id)
def _crawl_comments(self, app_msg_id, comment_id, appmsg_token, article_id):
""" """
api = 'https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&__biz={0}' \
'&appmsgid={1}&idx=1&comment_id={2}&offset=0&limit=100&uin=777&key=777' \
'&pass_ticket={3}&wxtoken=777&devicetype=android-26&clientversion=26060739' \
'&appmsg_token={4}&x5=1&f=json'.format(self.biz, app_msg_id, comment_id,
self.pass_ticket, appmsg_token)
resp = requests.get(api, headers=self.headers).json()
ret, status = resp['base_resp']['ret'], resp['base_resp']['errmsg']
if ret == 0 or status == 'ok':
elected_comment = resp['elected_comment']
for comment in elected_comment:
nick_name = comment.get('nick_name') #
logo_url = comment.get('logo_url') #
comment_time = datetime.fromtimestamp(comment.get('create_time')) #
content = comment.get('content') #
content_id = comment.get('content_id') # id
like_num = comment.get('like_num') #
# reply_list = comment.get('reply')['reply_list'] #
self.postgres.handler(self._save_article_comment(), (article_id, comment_id, nick_name, logo_url,
content_id, content, like_num, comment_time,
datetime.now()))
@staticmethod
def _save_article():
sql = 'insert into tb_article(msg_id,title,author,cover,digest,source_url,content_url,post_time,create_time) ' \
'values(%s,%s,%s,%s,%s,%s,%s,%s,%s) returning id'
return sql
@staticmethod
def _save_article_comment():
sql = 'insert into tb_article_comment(article_id,comment_id,nick_name,logo_url,content_id,content,like_num,' \
'comment_time,create_time) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)'
return sql
if __name__ == '__main__':
biz = 'MzI2NDk5NzA0Mw==' # "36 "
pass_ticket = 'NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy'
app_msg_token = '971_Z0lVNQBcGsWColSubRO9H13ZjrPhjuljyxLtiQ~~'
cookie = 'wap_sid2=CO3YwOQHEogBQnN4VTNhNmxQWmc3UHI2U3kteWhUeVExZHFVMnN0QXlsbzVJRUJKc1pkdVFUU2Y5UzhSVEtOZmt1VVlYTkR4SEllQ2huejlTTThJWndMQzZfYUw2SldLVGVMQUthUjc3QWdVMUdoaGN0Nml2SU05cXR1dTN2RkhRUVd1V2Y3SFJ5d01BQUF+fjCB1pLcBTgNQJVO'
#
wxMps = WxMps(biz, pass_ticket, app_msg_token, cookie)
wxMps.start() #
문말 소결마지막 으로 데이터 베이스 에 있 는 데 이 터 를 보 여 주 었 습 니 다.일방 통행 이 느 리 고 이런 데이터 수요 도 없 기 때문에 마음대로 손 을 써 보 았 습 니 다.
캡 처 한 부분 데이터
파충류 라 고 쓰 는 것 은 세심 한 일이 다.너무 귀 찮 으 면WechatSogou이 도 구 를 알 아 보 는 것 을 추천한다.문제 가 있 는 것 은 아래쪽 에 댓 글 을 달 아 토론 하 는 것 을 환영 합 니 다.
전체 코드:GitHub
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.