teekeks / pytwitchapi Goto Github PK
View Code? Open in Web Editor NEWA Python 3.7 compatible implementation of the Twitch API, EventSub, PubSub and Chat
Home Page: https://pytwitchapi.dev
License: MIT License
A Python 3.7 compatible implementation of the Twitch API, EventSub, PubSub and Chat
Home Page: https://pytwitchapi.dev
License: MIT License
The __api_{}_request
helper handle a 401 response while there are still retries left but ignore them after that
I want to subscribe to stream changes and I use slightly modded of webhook_example.py:
twitch = Twitch(APP_ID, APP_SECRET)
twitch.authenticate_app([])
hook = TwitchWebHook("https://nikitacartes.xyz:8100/", APP_ID, 8101)
hook.authenticate(twitch.get_app_token())
hook.start()
success, uuid_stream = hook.subscribe_stream_changed(USER_ID, callback_stream_changed)
print(f'was subscription successfull?: {success}')
print(twitch.get_webhook_subscriptions())
But get_webhook_subscriptions says, what i have 0 subscription.
was subscription successfull?: True
{'total': 0, 'data': [], 'pagination': {}}
For proxy from 8100 port to Plain 8101 I use maproxy, if this is important.
import tornado.ioloop
import maproxy.proxyserver
ssl_certs = {"certfile": "nikitacartes.xyz/fullchain.pem", "keyfile": "nikitacartes.xyz/privkey.pem"}
server = maproxy.proxyserver.ProxyServer("0.0.0.0", 8101, client_ssl_options=ssl_certs)
server.listen(8100)
tornado.ioloop.IOLoop.instance().start()
Currently, twitchAPI just uses the default logger, for better customization options it should use its own loggers.
Hello
While using the example code detailed in the chapter "User Authentication" of https://pypi.org/project/twitchAPI/
I get an error in the end of the program, that uses "token, refresh_token = auth.authenticate()"
The twitch page opens, i am redirected on http://localhost:17563/?code=(...), and the execution continues, until the program stops and then :
Task was destroyed but it is pending!
task: <Task pending name='Task-7' coro=<IocpProactor.accept..accept_coro() running at f:\dev\python\install\lib\asyncio\windows_events.py:566> wait_for=<_OverlappedFuture cancelled>>
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<IocpProactor.accept..accept_coro() running at f:\dev\python\install\lib\asyncio\windows_events.py:566> wait_for=<_OverlappedFuture cancelled>>
Exception ignored in: <function _ProactorBasePipeTransport.del at 0x00000169C487BD30>
Traceback (most recent call last):
File "f:\dev\python\install\lib\asyncio\proactor_events.py", line 116, in del
File "f:\dev\python\install\lib\asyncio\proactor_events.py", line 108, in close
File "f:\dev\python\install\lib\asyncio\base_events.py", line 746, in call_soon
File "f:\dev\python\install\lib\asyncio\base_events.py", line 510, in _check_closed
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending name='Task-8' coro=<RequestHandler.start() running at F:\Dev\Python\Projects\myProject\lib\site-packages\aiohttp\web_protocol.py:398> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x00000169C4DA1A90>()]>>
It seems the asyncio event stop is not handled properly. Am i doing something wrong or is there something missing in the sample code provided ?
For API calls where you can use both APP and USER access tokens
While using a reverse proxy is a nice way in adding https, having an option to directly set a pregenerated certificate would be nice for a lot of setups.
Maybe use this answer for a easy way: https://stackoverflow.com/a/51646535/6376756
When the Auth Flow is used, i regularly get an asyncio.CanceldError.
In your oauth.py you catch an CancelledError, but you dont catch the asyncio.CanceldError.
EventSub seems to be the future of the Twitch API, aiming to combine the Webhook and PubSub.
Docu: https://dev.twitch.tv/docs/eventsub
Will wait a bit to see where they are going with this before implementing it but planning to implement it.
Use named Logger and log more relevant information
In the imports of the code snippet for user authentication you import twitch.types
instead of twitchAPI.types
.
In that same snippet the variable twitch
passed to the UserAuthenticator is not yet defined.
Some Notifications (like Bits) can only be retrieved by PubSub (https://dev.twitch.tv/docs/pubsub).
It would be nice if you could implement this.
Hi again !
Still working on get_clips to try to get the list of clips of some streamers.
I used the temporary workaround you provide me to not use "clip_id"
test = twitch.get_clips(streamer.get('to_id'), Game.get('id'), [], first=100, started_at=timeStart)
I get an answer from twitch (no exception in the code) that is :
{'error': 'Bad Request', 'status': 400, 'message': 'parsing time "2020-10-26T19:30:50.688906" as "2006-01-02T15:04:05Z07:00": cannot parse "" as "Z07:00"'}
I tried using a timeStart generated by the two codes :
timeStart = datetime.datetime(datetime.date.today().year, datetime.date.today().month, datetime.date.today().day)
timeStart = datetime.datetime.now()
Meaning my timeStart is coded : 2020-10-26 19:30:50.688906
Should the get_clips function "transform" the datetime.datetime given by adding something in the end before sending it to twitch? Or is there something i missed ? Or is the "Z07:00" something that i can provide ?
I tried playing with tznames from datetime but i can't find a way to make this work...
we get this returned on an invalid refresh token:
{'message': 'Invalid refresh token', 'status': 400}
This results in a KeyError on return
currently we just use request.get_json()
without checking if the request even returns valid json.
There where an Update to the Twitch Helix API and additional Webhooks for the HypeTrain.
would be nice if you could implement this
https://blog.twitch.tv/en/2020/06/18/announcing-the-latest-helix-endpoints-and-hype-train-api/
I was trying to run the example WebSocket code and it crashes on this:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/dist-packages/twitchAPI/oauth.py", line 103, in __run
self.__loop.run_until_complete(site.start())
File "/usr/lib/python3.7/asyncio/base_events.py", line 579, in run_until_complete
return future.result()
File "/usr/local/lib/python3.7/dist-packages/aiohttp/web_runner.py", line 104, in start
reuse_port=self._reuse_port)
File "/usr/lib/python3.7/asyncio/base_events.py", line 1374, in create_server
% (sa, err.strerror.lower())) from None
OSError: [Errno 99] error while attempting to bind on address ('::1', 17563, 0, 0): cannot assign requested address
The example I used can be found here
You are required to specify at least one of from_id and to_id. It is not catched when both are set to None.
There is no AuthScope check on subscribe events.
Hi,
I am trying to get the list of clips of a streamer, from a game. I have the broadcaster ID and the game ID but no clip id (that's what i am looking for)
Reading the twitch api on https://dev.twitch.tv/docs/api/reference#get-clips i should be using "get_clips".
i read the sentence : "For a query to be valid, id (one or more), broadcaster_id, or game_id must be specified. You may specify only one of these parameters." just before the optional query parameter.
The python TwitchAPI doesn't let me go without the clip_id. When i try the call :
test = twitch.get_clips(broadcaster_id=streamer.get('to_id'),game_id=Game.get('id'),first=100,started_at=timeStart)
i get the error :
TypeError: get_clips() missing 1 required positional argument: 'clip_id'
Is it a difference between the python Twitch API and the Twitch API or should i do this differently ?
Since the Twitch API currently does not have any call that is not requiring at elast a app token, add a flag to init for automatic authentication.
This will save one line of code that will be required in almost all circumstances of using the library.
Calling start or stop twice runs into an error this way
If both logins and/or ids are a empty list, it selects the wrong AuthType
use named logger and log more relevant information
Twitch documentation was missing the documentation that quite a few endpoints support pagination, see here:
twitchdev/issues#19
Use Named logger and log more relevant information
Hello,
I am currently trying to get the ouath section of this work. In order for this to work you must have a redirect URI for your site that is set inside the settings for your twitch site as you mention here: https://pytwitchapi.readthedocs.io/en/latest/modules/twitchAPI.oauth.html?highlight=redirect#requirements
However, I did not see a way for you to change the redirect URI, which means that the only valid redirect uri is 'localhost:17563' as seen here under the UserAuthenticator class: https://github.com/Teekeks/pyTwitchAPI/blob/master/twitchAPI/oauth.py
Did I miss something in the documentation? Or was there a way of directly changing the uri in the UserAuthenticator class?
Hi,
I found a bug inside of twitch.py.
The subroutines:
At the moment they are defined as:
url = build_url('channel_poi......
but should look like:
url = build_url(TWITCH_API_BASE_URL + 'channel_poi......
Could you please fix that?
regards
Thomas
if __connect fails to establish a connection, it currently just assumes that ther is a connection anyway. There needs to be a handling for failed connections
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.