Compare commits

...

18 Commits

Author SHA1 Message Date
55448286+taizan-hokuto@users.noreply.github.com
d5efede758 Merge branch 'develop' 2019-11-03 15:31:06 +09:00
55448286+taizan-hokuto@users.noreply.github.com
dc9b067d1d Increment version 2019-11-03 15:30:35 +09:00
55448286+taizan-hokuto@users.noreply.github.com
940e2a7431 Update manifest.in 2019-11-03 15:26:24 +09:00
55448286+taizan-hokuto@users.noreply.github.com
8fcb3ab50f Merge branch 'develop' 2019-11-03 15:15:47 +09:00
55448286+taizan-hokuto@users.noreply.github.com
8ef6474c90 Increment version 2019-11-03 15:14:52 +09:00
55448286+taizan-hokuto@users.noreply.github.com
5da28e4d89 Update setup.py 2019-11-03 15:03:09 +09:00
55448286+taizan-hokuto@users.noreply.github.com
8902955fed Update setup.py 2019-11-03 15:02:22 +09:00
55448286+taizan-hokuto@users.noreply.github.com
30429b05a5 Merge branch 'develop' 2019-11-03 14:12:44 +09:00
55448286+taizan-hokuto@users.noreply.github.com
ca266ef04b Increment version 2019-11-03 14:12:24 +09:00
55448286+taizan-hokuto@users.noreply.github.com
8891b35dc7 Devide requirements_test.txt
/ Eliminate version from requirements.txt
2019-11-03 13:59:15 +09:00
55448286+taizan-hokuto@users.noreply.github.com
0f63e172dc Merge branch 'develop' 2019-11-03 13:14:58 +09:00
55448286+taizan-hokuto@users.noreply.github.com
c0a790a7c4 Increment version 2019-11-03 13:14:38 +09:00
55448286+taizan-hokuto@users.noreply.github.com
1625bf51e9 Make it possible to set the period for reading past chat data 2019-11-03 13:12:24 +09:00
55448286+taizan-hokuto@users.noreply.github.com
0d80c249f3 Modify setup.py packages param 2019-11-03 12:58:35 +09:00
55448286+taizan-hokuto@users.noreply.github.com
57d72cb78d Merge branch 'develop' 2019-11-03 10:59:11 +09:00
55448286+taizan-hokuto@users.noreply.github.com
af6b75669b Increment version 2019-11-03 10:58:49 +09:00
55448286+taizan-hokuto@users.noreply.github.com
48f07bdf34 Update README 2019-11-03 09:42:41 +09:00
55448286+taizan-hokuto@users.noreply.github.com
01dc1709c4 Update README 2019-11-03 09:39:58 +09:00
8 changed files with 59 additions and 35 deletions

View File

@@ -1 +1,3 @@
include requirements.txt include requirements.txt
include requirements_test.txt

View File

@@ -1,11 +1,10 @@
pytchat pytchat
======= =======
pytchat is a python library for fetching youtube live chat. pytchat is a python library for fetching youtube live chat.
## Description ## Description
pytchat is a python library for fetching youtube live chat. pytchat is a python library for fetching youtube live chat
without using youtube api, Selenium or BeautifulSoup. without using youtube api, Selenium or BeautifulSoup.
Other features: Other features:
@@ -15,12 +14,13 @@ Other features:
instead of web scraping. instead of web scraping.
## Install ## Install
``` ```python
pip install pytchat pip install pytchat
``` ```
## Examples ## Examples
``` ### on-demand mode
```python
from pytchat import LiveChat from pytchat import LiveChat
chat = LiveChat("G1w62uEMZ74") chat = LiveChat("G1w62uEMZ74")
@@ -31,12 +31,14 @@ while chat.is_alive():
data.tick() data.tick()
``` ```
callback mode ### callback mode
``` ```python
from pytchat import LiveChat from pytchat import LiveChat
import time
chat = LiveChat("G1w62uEMZ74", callback = func) chat = LiveChat("G1w62uEMZ74", callback = func)
while chat.is_alive(): while chat.is_alive():
#other background operation here.
time.sleep(3) time.sleep(3)
def func(chatdata): def func(chatdata):
@@ -45,8 +47,8 @@ def func(chatdata):
chat.tick() chat.tick()
``` ```
asyncio context: ### asyncio context:
``` ```python
from pytchat import LiveChatAsync from pytchat import LiveChatAsync
import asyncio import asyncio
@@ -66,8 +68,8 @@ loop.run_until_complete(main())
``` ```
yt api compatible processor: ### yt api compatible processor:
``` ```python
from pytchat import LiveChat, CompatibleProcessor from pytchat import LiveChat, CompatibleProcessor
chat = LiveChat("G1w62uEMZ74", chat = LiveChat("G1w62uEMZ74",
@@ -113,6 +115,11 @@ Structure of each item which got from items() function.
<td>int</td> <td>int</td>
<td>unixtime milliseconds</td> <td>unixtime milliseconds</td>
</tr> </tr>
<tr>
<td>datetime</td>
<td>str</td>
<td></td>
</tr>
<tr> <tr>
<td>amountValue</td> <td>amountValue</td>
<td>float</td> <td>float</td>
@@ -188,10 +195,13 @@ Structure of author object.
<td></td> <td></td>
</tr> </tr>
</table> </table>
## Licence ## Licence
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
## Author ## Author
[taizan-hokuto](https://github.com/taizan-hokuto) [taizan-hokuto](https://github.com/taizan-hokuto)
[twitter:@taizan205](https://twitter.com/taizan205)

View File

@@ -2,11 +2,11 @@
pytchat is a python library for fetching youtube live chat. pytchat is a python library for fetching youtube live chat.
""" """
__copyright__ = 'Copyright (C) 2019 taizan-hokuto' __copyright__ = 'Copyright (C) 2019 taizan-hokuto'
__version__ = '0.0.1.5' __version__ = '0.0.2.0'
__license__ = 'MIT' __license__ = 'MIT'
__author__ = 'taizan-hokuto' __author__ = 'taizan-hokuto'
__author_email__ = '55448286+taizan-hokuto@users.noreply.github.com' __author_email__ = '55448286+taizan-hokuto@users.noreply.github.com'
__url__ = 'https://github.com/taizan-hokuto' __url__ = 'https://github.com/taizan-hokuto/pytchat'
__all__ = ["core_async","core_multithread","processors"] __all__ = ["core_async","core_multithread","processors"]

View File

@@ -122,7 +122,7 @@ def _build(video_id, _ts1, _ts2, _ts3, _ts4, _ts5, topchatonly = False):
) )
def _times(): def _times(past_sec):
def unixts_now(): def unixts_now():
now = datetime.datetime.now(pytz.utc) now = datetime.datetime.now(pytz.utc)
@@ -132,12 +132,18 @@ def _times():
_ts1= n - random.uniform(0,1*3) _ts1= n - random.uniform(0,1*3)
_ts2= n - random.uniform(0.01,0.99) _ts2= n - random.uniform(0.01,0.99)
_ts3= n - 60*60 + random.uniform(0,1) _ts3= n - past_sec + random.uniform(0,1)
_ts4= n - random.uniform(10*60,60*60) _ts4= n - random.uniform(10*60,60*60)
_ts5= n - random.uniform(0.01,0.99) _ts5= n - random.uniform(0.01,0.99)
return list(map(lambda x:int(x*1000000),[_ts1,_ts2,_ts3,_ts4,_ts5])) return list(map(lambda x:int(x*1000000),[_ts1,_ts2,_ts3,_ts4,_ts5]))
def getparam(video_id): def getparam(video_id,past_sec = 60):
return _build(video_id,*_times()) '''
Parameter
---------
past_sec : int
seconds to load past chat data
'''
return _build(video_id,*_times(past_sec))

View File

@@ -16,7 +16,7 @@ class Chatdata:
async def tick_async(self): async def tick_async(self):
if self.interval == 0: if self.interval == 0:
await asyncio.sleep(3) await asyncio.sleep(0.5)
return return
await asyncio.sleep(self.interval/len(self.items)) await asyncio.sleep(self.interval/len(self.items))

View File

@@ -1,9 +1,4 @@
aiohttp==3.6.0 aiohttp
aioresponses==0.6.0 pytz
mock==3.0.5 requests
mocker==1.1.1 urllib3
pytest==5.1.2
pytest-mock==1.10.4
pytz==2019.2
requests==2.22.0
urllib3==1.25.3

5
requirements_test.txt Normal file
View File

@@ -0,0 +1,5 @@
aioresponses
mock
mocker
pytest
pytest-mock

View File

@@ -1,14 +1,18 @@
from setuptools import setup, find_packages from setuptools import setup, find_packages, Command
from codecs import open from codecs import open
from os import path from os import path, system
import re import re
package_name = "pytchat" package_name = "pytchat"
root_dir = path.abspath(path.dirname(__file__)) root_dir = path.abspath(path.dirname(__file__))
def _requires_from_file(filename): def _requirements():
return open(filename).read().splitlines() return [name.rstrip() for name in open(path.join(root_dir, 'requirements.txt')).readlines()]
def _test_requirements():
return [name.rstrip() for name in open(path.join(root_dir, 'requirements_test.txt')).readlines()]
with open(path.join(root_dir, package_name, '__init__.py')) as f: with open(path.join(root_dir, package_name, '__init__.py')) as f:
init_text = f.read() init_text = f.read()
@@ -27,18 +31,20 @@ assert url
with open('README.md', encoding='utf-8') as f: with open('README.md', encoding='utf-8') as f:
long_description = f.read() long_description = f.read()
setup( setup(
name=package_name, name=package_name,
packages=[package_name], packages=find_packages(),
version=version, version=version,
url=url, url=url,
author=author, author=author,
author_email=author_email, author_email=author_email,
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
license=license, license=license,
install_requires=_requirements(),
tests_require=_test_requirements(),
description="a python library for fetching youtube live chat.", description="a python library for fetching youtube live chat.",
classifiers=[ classifiers=[
'Natural Language :: Japanese', 'Natural Language :: Japanese',
@@ -52,5 +58,5 @@ setup(
'License :: OSI Approved :: MIT License', 'License :: OSI Approved :: MIT License',
], ],
keywords='youtube livechat asyncio', keywords='youtube livechat asyncio',
install_requires=_requires_from_file('requirements.txt')
) )