Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BillLi
ItChat
提交
fa4dc1dc
I
ItChat
项目概览
BillLi
/
ItChat
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
ItChat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fa4dc1dc
编写于
12月 07, 2016
作者:
L
LittleCoder
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update file uploading protocol
上级
35277aaf
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
40 addition
and
18 deletion
+40
-18
.gitignore
.gitignore
+1
-0
docs/index.md
docs/index.md
+1
-1
itchat/components/contact.py
itchat/components/contact.py
+1
-1
itchat/components/messages.py
itchat/components/messages.py
+34
-14
itchat/config.py
itchat/config.py
+1
-1
itchat/core.py
itchat/core.py
+2
-1
未找到文件。
.gitignore
浏览文件 @
fa4dc1dc
build/*
build/*
dist/*
dist/*
test/*
itchat.egg-info/*
itchat.egg-info/*
*.pyc
*.pyc
*.swp
*.swp
...
...
docs/index.md
浏览文件 @
fa4dc1dc
# itchat
# itchat
[
![Gitter
][
gitter-picture
]
]
[
gitter] ![py27
][
py27
]
!
[
py35
][
py35
]
[
English version
][
english-version
]
[
![Gitter
][
gitter-picture
]
]
[
gitter] ![py27
][
py27
]
!
[
py35
][
py35
]
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
...
...
itchat/components/contact.py
浏览文件 @
fa4dc1dc
import
os
,
time
,
re
import
os
,
time
,
re
,
io
import
json
,
copy
import
json
,
copy
import
traceback
,
logging
import
traceback
,
logging
...
...
itchat/components/messages.py
浏览文件 @
fa4dc1dc
import
os
,
time
,
re
,
io
import
os
,
time
,
re
,
io
import
json
import
json
import
mimetypes
import
mimetypes
,
hashlib
import
traceback
,
logging
import
traceback
,
logging
import
requests
import
requests
...
@@ -235,39 +235,59 @@ def send_msg(self, msg='Test Message', toUserName=None):
...
@@ -235,39 +235,59 @@ def send_msg(self, msg='Test Message', toUserName=None):
r
=
self
.
send_raw_msg
(
1
,
msg
,
toUserName
)
r
=
self
.
send_raw_msg
(
1
,
msg
,
toUserName
)
return
r
return
r
def
upload_file
(
self
,
fileDir
,
isPicture
=
False
,
isVideo
=
False
):
def
upload_file
(
self
,
fileDir
,
isPicture
=
False
,
isVideo
=
False
,
toUserName
=
'filehelper'
):
logger
.
debug
(
'Request to upload a %s: %s'
%
(
logger
.
debug
(
'Request to upload a %s: %s'
%
(
'picture'
if
isPicture
else
'video'
if
isVideo
else
'file'
,
fileDir
))
'picture'
if
isPicture
else
'video'
if
isVideo
else
'file'
,
fileDir
))
if
not
utils
.
check_file
(
fileDir
):
if
not
utils
.
check_file
(
fileDir
):
return
ReturnValue
({
'BaseResponse'
:
{
return
ReturnValue
({
'BaseResponse'
:
{
'ErrMsg'
:
'No file found in specific dir'
,
'ErrMsg'
:
'No file found in specific dir'
,
'Ret'
:
-
1002
,
}})
'Ret'
:
-
1002
,
}})
url
=
self
.
loginInfo
.
get
(
'fileUrl'
,
self
.
loginInfo
[
'url'
])
+
\
fileSize
=
os
.
path
.
getsize
(
fileDir
)
fileSymbol
=
'pic'
if
isPicture
else
'video'
if
isVideo
else
'doc'
with
open
(
fileDir
,
'rb'
)
as
f
:
fileMd5
=
hashlib
.
md5
(
f
.
read
()).
hexdigest
()
file
=
open
(
fileDir
,
'rb'
)
chunks
=
int
(
fileSize
/
524288
)
+
1
for
chunk
in
range
(
chunks
):
r
=
upload_chunk_file
(
self
,
fileDir
,
fileSymbol
,
fileSize
,
fileMd5
,
file
,
toUserName
,
chunk
,
chunks
)
file
.
close
()
self
.
loginInfo
[
'msgid'
]
+=
1
return
ReturnValue
(
rawResponse
=
r
)
def
upload_chunk_file
(
core
,
fileDir
,
fileSymbol
,
fileSize
,
fileMd5
,
file
,
toUserName
,
chunk
,
chunks
):
url
=
core
.
loginInfo
.
get
(
'fileUrl'
,
core
.
loginInfo
[
'url'
])
+
\
'/webwxuploadmedia?f=json'
'/webwxuploadmedia?f=json'
# save it on server
# save it on server
fileSize
=
str
(
os
.
path
.
getsize
(
fileDir
))
cookiesList
=
{
name
:
data
for
name
,
data
in
core
.
s
.
cookies
.
items
()}
cookiesList
=
{
name
:
data
for
name
,
data
in
self
.
s
.
cookies
.
items
()}
fileType
=
mimetypes
.
guess_type
(
fileDir
)[
0
]
or
'application/octet-stream'
fileType
=
mimetypes
.
guess_type
(
fileDir
)[
0
]
or
'application/octet-stream'
files
=
{
files
=
{
'id'
:
(
None
,
'WU_FILE_0'
),
'id'
:
(
None
,
'WU_FILE_0'
),
'name'
:
(
None
,
os
.
path
.
basename
(
fileDir
)),
'name'
:
(
None
,
os
.
path
.
basename
(
fileDir
)),
'type'
:
(
None
,
fileType
),
'type'
:
(
None
,
fileType
),
'lastModifiedDate'
:
(
None
,
time
.
strftime
(
'%a %b %d %Y %H:%M:%S GMT+0800 (CST)'
)),
'lastModifiedDate'
:
(
None
,
time
.
strftime
(
'%a %b %d %Y %H:%M:%S GMT+0800 (CST)'
)),
'size'
:
(
None
,
fileSize
),
'size'
:
(
None
,
str
(
fileSize
)
),
'mediatype'
:
(
None
,
'pic'
if
isPicture
else
'video'
if
isVideo
else
'doc'
),
'mediatype'
:
(
None
,
fileSymbol
),
'uploadmediarequest'
:
(
None
,
json
.
dumps
({
'uploadmediarequest'
:
(
None
,
json
.
dumps
({
'BaseRequest'
:
self
.
loginInfo
[
'BaseRequest'
],
'UploadType'
:
(
None
,
2
),
'ClientMediaId'
:
int
(
time
.
time
()),
'BaseRequest'
:
core
.
loginInfo
[
'BaseRequest'
],
'ClientMediaId'
:
core
.
loginInfo
[
'msgid'
],
'TotalLen'
:
fileSize
,
'TotalLen'
:
fileSize
,
'StartPos'
:
0
,
'StartPos'
:
0
,
'DataLen'
:
fileSize
,
'DataLen'
:
fileSize
,
'MediaType'
:
4
,
},
separators
=
(
','
,
':'
))),
'MediaType'
:
4
,
'FromUserName'
:
core
.
storageClass
.
userName
,
'ToUserName'
:
toUserName
,
'FileMd5'
:
fileMd5
,
},
separators
=
(
','
,
':'
))),
'webwx_data_ticket'
:
(
None
,
cookiesList
[
'webwx_data_ticket'
]),
'webwx_data_ticket'
:
(
None
,
cookiesList
[
'webwx_data_ticket'
]),
'pass_ticket'
:
(
None
,
'undefined'
),
'pass_ticket'
:
(
None
,
core
.
loginInfo
[
'pass_ticket'
]),
'filename'
:
(
os
.
path
.
basename
(
fileDir
),
open
(
fileDir
,
'rb'
),
fileType
),
}
'filename'
:
(
os
.
path
.
basename
(
fileDir
),
file
.
read
(
524288
),
fileType
),
}
if
chunks
!=
1
:
files
[
'chunk'
],
files
[
'chunks'
]
=
(
None
,
str
(
chunk
)),
(
None
,
str
(
chunks
))
headers
=
{
'User-Agent'
:
config
.
USER_AGENT
}
headers
=
{
'User-Agent'
:
config
.
USER_AGENT
}
r
=
self
.
s
.
post
(
url
,
files
=
files
,
headers
=
headers
)
return
core
.
s
.
post
(
url
,
files
=
files
,
headers
=
headers
)
return
ReturnValue
(
rawResponse
=
r
)
def
send_file
(
self
,
fileDir
,
toUserName
=
None
,
mediaId
=
None
):
def
send_file
(
self
,
fileDir
,
toUserName
=
None
,
mediaId
=
None
):
logger
.
debug
(
'Request to send a file(mediaId: %s) to %s: %s'
%
(
logger
.
debug
(
'Request to send a file(mediaId: %s) to %s: %s'
%
(
...
...
itchat/config.py
浏览文件 @
fa4dc1dc
import
os
,
platform
import
os
,
platform
VERSION
=
'1.2.1
1
'
VERSION
=
'1.2.1
2
'
BASE_URL
=
'https://login.weixin.qq.com'
BASE_URL
=
'https://login.weixin.qq.com'
OS
=
platform
.
system
()
#Windows, Linux, Darwin
OS
=
platform
.
system
()
#Windows, Linux, Darwin
DIR
=
os
.
getcwd
()
DIR
=
os
.
getcwd
()
...
...
itchat/core.py
浏览文件 @
fa4dc1dc
...
@@ -311,7 +311,8 @@ class Core(object):
...
@@ -311,7 +311,8 @@ class Core(object):
it is defined in components/messages.py
it is defined in components/messages.py
'''
'''
raise
NotImplementedError
()
raise
NotImplementedError
()
def
upload_file
(
self
,
fileDir
,
isPicture
=
False
,
isVideo
=
False
):
def
upload_file
(
self
,
fileDir
,
isPicture
=
False
,
isVideo
=
False
,
toUserName
=
'filehelper'
):
''' upload file to server and get mediaId
''' upload file to server and get mediaId
for options
for options
- fileDir: dir for file ready for upload
- fileDir: dir for file ready for upload
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录