{"action":"created","comment":{"url":"https://api.github.com/repos/streamlink/streamlink/pulls/comments/204085330","pull_request_review_id":139108398,"id":204085330,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNDA4NTMzMA==","diff_hunk":"@@ -0,0 +1,147 @@\n+from streamlink.exceptions import NoStreamsError\n+from streamlink.plugin import Plugin\n+from streamlink.plugin.plugin import parse_url_params\n+from streamlink.stream import HLSStream\n+from streamlink.utils import update_scheme\n+\n+import hashlib\n+import hmac\n+import re\n+import struct\n+import time\n+import uuid\n+from base64 import urlsafe_b64encode\n+from binascii import unhexlify\n+\n+from Crypto.Cipher import AES\n+from requests import Response\n+from requests.adapters import BaseAdapter\n+\n+\n+class AbemaTVLicenseAdapter(BaseAdapter):\n+    '''\n+    Handling abematv-license:// protocol to get real video key_data.\n+    '''\n+    SECRETKEY = b\"v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhe\"\n+    \n+    STRTABLE = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n+    \n+    HMACKEY = b\"3AF0298C219469522A313570E8583005A642E73EDD58E3EA2FB7339D3DF1597E\"\n+\n+    def __init__(self, session):\n+        self._plugin_session = session\n+        super(AbemaTVLicenseAdapter, self).__init__()\n+\n+    def _generateApplicationKeySecret(self, deviceId):\n+        deviceId = deviceId.encode(\"utf-8\") # for python3\n+        # plus 1 hour and drop minute and secs\n+        ts_1hour = (int(time.time()) + 60*60) // 3600 * 3600 # for python3 : floor division\n+        time_struct = time.gmtime(ts_1hour)\n+\n+        h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+        h.update(SECRETKEY)\n+        tmp = h.digest()\n+        for i in range(time_struct.tm_mon):\n+            h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+            h.update(tmp)\n+            tmp = h.digest()\n+        h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+        h.update(urlsafe_b64encode(tmp).rstrip(b\"=\")+deviceId)\n+        tmp = h.digest()\n+        for i in range(time_struct.tm_mday % 5):\n+            h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+            h.update(tmp)\n+            tmp = h.digest()\n+\n+        h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+        h.update(urlsafe_b64encode(tmp).rstrip(b\"=\") + str(ts_1hour).encode(\"utf-8\"))\n+        tmp = h.digest()\n+\n+        for i in range(time_struct.tm_hour % 5):  # utc hour\n+            h = hmac.new(SECRETKEY, digestmod=hashlib.sha256)\n+            h.update(tmp)\n+            tmp = h.digest()\n+\n+        return urlsafe_b64encode(tmp).rstrip(b\"=\").decode(\"utf-8\")\n+\n+    def _getVideoKeyFromTicket(self, ticket):\n+        deviceId = str(uuid.uuid4())\n+        res = requests.post(\"https://api.abema.io/v1/users\", json={\n+                                             \"deviceId\": deviceId, \"applicationKeySecret\": self._generateApplicationKeySecret(deviceId)})\n+        usertoken = res.json()['token']\n+\n+        params = {\"osName\": \"android\", \"osVersion\": \"6.0.1\", \"osLang\": \"ja_JP\", \"osTimezone\": \"Asia/Tokyo\", \"appId\": \"tv.abema\", \"appVersion\": \"3.27.1\"}\n+        res = self._plugin_session.http.get(\"https://api.abema.io/v1/media/token\", params=params, headers={\"Authorization\": \"Bearer \"+usertoken})\n+        mediatoken = res.json()['token']\n+\n+        res = self._plugin_session.http.post(\"https://license.abema.io/abematv-hls\", params={\"t\": mediatoken}, json={\"kv\": \"a\", \"lt\": ticket})\n+        cid = res.json()['cid']\n+        key = res.json()['k']\n+\n+        res = sum([STRTABLE.find(key[i]) * (58 ** (len(key) - 1 - i))  for i in range(len(key))])\n+        encVideoKey = struct.pack('>QQ', res >> 64, res & 0xffffffffffffffff)\n+\n+        # Crypto.Cipher.ARC4.new('DB98A8E7CECA3424D975280F90BD03EE'.decode('hex')).decrypt('D4B718BBBA9CFB7D0192A58F9E2D146AFC5DB29E4352DE05FC4CF2C1005804BB'.decode('hex')).encode('hex')\n+        h = hmac.new(unhexlify(HMACKEY), (cid+deviceId).encode(\"utf-8\"), digestmod=hashlib.sha256)\n+        enckey = h.digest()\n+\n+        aes = AES.new(enckey, AES.MODE_ECB)\n+        rawVideoKey = aes.decrypt(encVideoKey)\n+\n+        return rawVideoKey\n+\n+    def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):\n+        resp = Response()\n+        resp.status_code = 200\n+        ticket = re.findall(r\"abematv-license://(.*)\", request.url)[0]\n+        resp._content = self._getVideoKeyFromTicket(ticket)\n+        return resp\n+\n+    def close(self):\n+        return\n+\n+\n+\n+class AbemaTV(Plugin):\n+    '''\n+    Abema.tv https://abema.tv/\n+    Note: Streams are geo-restricted to Japan\n+\n+    '''\n+    _url_re = re.compile(r\"https://abema\\.tv/(now-on-air/(?P<onair>.+)|video/episode/(?P<episode>.+)|channels/.+?/slots/(?P<slot>.+))\")","path":"src/streamlink/plugins/abematv.py","position":null,"original_position":111,"commit_id":"c101f9daa3a25a2c2dd23e32ac4ce8d3a1660853","original_commit_id":"ab2aba3f53398da57d9900f0b250867727a7cc25","user":{"login":"beardypig","id":16033421,"node_id":"MDQ6VXNlcjE2MDMzNDIx","avatar_url":"https://avatars2.githubusercontent.com/u/16033421?v=4","gravatar_id":"","url":"https://api.github.com/users/beardypig","html_url":"https://github.com/beardypig","followers_url":"https://api.github.com/users/beardypig/followers","following_url":"https://api.github.com/users/beardypig/following{/other_user}","gists_url":"https://api.github.com/users/beardypig/gists{/gist_id}","starred_url":"https://api.github.com/users/beardypig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/beardypig/subscriptions","organizations_url":"https://api.github.com/users/beardypig/orgs","repos_url":"https://api.github.com/users/beardypig/repos","events_url":"https://api.github.com/users/beardypig/events{/privacy}","received_events_url":"https://api.github.com/users/beardypig/received_events","type":"User","site_admin":false},"body":"`re.match` finds the first match, so unless you have `$` in the the expression it will match :)","created_at":"2018-07-20T15:37:36Z","updated_at":"2018-07-20T15:37:36Z","html_url":"https://github.com/streamlink/streamlink/pull/1949#discussion_r204085330","pull_request_url":"https://api.github.com/repos/streamlink/streamlink/pulls/1949","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/comments/204085330"},"html":{"href":"https://github.com/streamlink/streamlink/pull/1949#discussion_r204085330"},"pull_request":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/1949"}},"in_reply_to_id":204002326},"pull_request":{"url":"https://api.github.com/repos/streamlink/streamlink/pulls/1949","id":202582646,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAyNTgyNjQ2","html_url":"https://github.com/streamlink/streamlink/pull/1949","diff_url":"https://github.com/streamlink/streamlink/pull/1949.diff","patch_url":"https://github.com/streamlink/streamlink/pull/1949.patch","issue_url":"https://api.github.com/repos/streamlink/streamlink/issues/1949","number":1949,"state":"open","locked":false,"title":"Plugin Request: new plugin for Abema.tv","user":{"login":"jackyzy823","id":2900871,"node_id":"MDQ6VXNlcjI5MDA4NzE=","avatar_url":"https://avatars3.githubusercontent.com/u/2900871?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzy823","html_url":"https://github.com/jackyzy823","followers_url":"https://api.github.com/users/jackyzy823/followers","following_url":"https://api.github.com/users/jackyzy823/following{/other_user}","gists_url":"https://api.github.com/users/jackyzy823/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzy823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzy823/subscriptions","organizations_url":"https://api.github.com/users/jackyzy823/orgs","repos_url":"https://api.github.com/users/jackyzy823/repos","events_url":"https://api.github.com/users/jackyzy823/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzy823/received_events","type":"User","site_admin":false},"body":"## Plugin Request\r\n\r\n- [x] I have read the contribution and plugin request guidelines. <!-- Replace the space with an x to check the box: [x] -->\r\n\r\n### Description\r\nAbema.tv  is a japanese live (news,drama,anime , etc) and vod stream site.\r\n\r\n\r\n### Example stream URLs\r\n1. Live stream:  https://abema.tv/now-on-air/abema-news\r\n2. VOD stream: https://abema.tv/video/episode/90-1053_s99_p12\r\n3. VOD stream: https://abema.tv/channels/everybody-anime/slots/FJcUsdYjTk1rAb\r\n\r\n### Comments, screenshots, etc.\r\n1.Because of `ext-x-discontinuity` issue, players may not handle live stream discontinuity properly.\r\n2.Streams are geo-restricted to Japan , but could be bypassed via `--http-header 'X-Forwarded-For=A_JAPAN_IP' `   (TESTONLY)","created_at":"2018-07-19T14:40:12Z","updated_at":"2018-07-20T15:37:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f469adfc0a74a8e92167bf58f240a6644ebd0092","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":484983383,"node_id":"MDU6TGFiZWw0ODQ5ODMzODM=","url":"https://api.github.com/repos/streamlink/streamlink/labels/plugin%20request","name":"plugin request","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/streamlink/streamlink/pulls/1949/commits","review_comments_url":"https://api.github.com/repos/streamlink/streamlink/pulls/1949/comments","review_comment_url":"https://api.github.com/repos/streamlink/streamlink/pulls/comments{/number}","comments_url":"https://api.github.com/repos/streamlink/streamlink/issues/1949/comments","statuses_url":"https://api.github.com/repos/streamlink/streamlink/statuses/c101f9daa3a25a2c2dd23e32ac4ce8d3a1660853","head":{"label":"jackyzy823:plugin.abematv","ref":"plugin.abematv","sha":"c101f9daa3a25a2c2dd23e32ac4ce8d3a1660853","user":{"login":"jackyzy823","id":2900871,"node_id":"MDQ6VXNlcjI5MDA4NzE=","avatar_url":"https://avatars3.githubusercontent.com/u/2900871?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzy823","html_url":"https://github.com/jackyzy823","followers_url":"https://api.github.com/users/jackyzy823/followers","following_url":"https://api.github.com/users/jackyzy823/following{/other_user}","gists_url":"https://api.github.com/users/jackyzy823/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzy823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzy823/subscriptions","organizations_url":"https://api.github.com/users/jackyzy823/orgs","repos_url":"https://api.github.com/users/jackyzy823/repos","events_url":"https://api.github.com/users/jackyzy823/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzy823/received_events","type":"User","site_admin":false},"repo":{"id":141294998,"node_id":"MDEwOlJlcG9zaXRvcnkxNDEyOTQ5OTg=","name":"streamlink","full_name":"jackyzy823/streamlink","owner":{"login":"jackyzy823","id":2900871,"node_id":"MDQ6VXNlcjI5MDA4NzE=","avatar_url":"https://avatars3.githubusercontent.com/u/2900871?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzy823","html_url":"https://github.com/jackyzy823","followers_url":"https://api.github.com/users/jackyzy823/followers","following_url":"https://api.github.com/users/jackyzy823/following{/other_user}","gists_url":"https://api.github.com/users/jackyzy823/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzy823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzy823/subscriptions","organizations_url":"https://api.github.com/users/jackyzy823/orgs","repos_url":"https://api.github.com/users/jackyzy823/repos","events_url":"https://api.github.com/users/jackyzy823/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzy823/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jackyzy823/streamlink","description":"CLI for extracting streams from various websites to a video player of your choosing","fork":true,"url":"https://api.github.com/repos/jackyzy823/streamlink","forks_url":"https://api.github.com/repos/jackyzy823/streamlink/forks","keys_url":"https://api.github.com/repos/jackyzy823/streamlink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jackyzy823/streamlink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jackyzy823/streamlink/teams","hooks_url":"https://api.github.com/repos/jackyzy823/streamlink/hooks","issue_events_url":"https://api.github.com/repos/jackyzy823/streamlink/issues/events{/number}","events_url":"https://api.github.com/repos/jackyzy823/streamlink/events","assignees_url":"https://api.github.com/repos/jackyzy823/streamlink/assignees{/user}","branches_url":"https://api.github.com/repos/jackyzy823/streamlink/branches{/branch}","tags_url":"https://api.github.com/repos/jackyzy823/streamlink/tags","blobs_url":"https://api.github.com/repos/jackyzy823/streamlink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jackyzy823/streamlink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jackyzy823/streamlink/git/refs{/sha}","trees_url":"https://api.github.com/repos/jackyzy823/streamlink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jackyzy823/streamlink/statuses/{sha}","languages_url":"https://api.github.com/repos/jackyzy823/streamlink/languages","stargazers_url":"https://api.github.com/repos/jackyzy823/streamlink/stargazers","contributors_url":"https://api.github.com/repos/jackyzy823/streamlink/contributors","subscribers_url":"https://api.github.com/repos/jackyzy823/streamlink/subscribers","subscription_url":"https://api.github.com/repos/jackyzy823/streamlink/subscription","commits_url":"https://api.github.com/repos/jackyzy823/streamlink/commits{/sha}","git_commits_url":"https://api.github.com/repos/jackyzy823/streamlink/git/commits{/sha}","comments_url":"https://api.github.com/repos/jackyzy823/streamlink/comments{/number}","issue_comment_url":"https://api.github.com/repos/jackyzy823/streamlink/issues/comments{/number}","contents_url":"https://api.github.com/repos/jackyzy823/streamlink/contents/{+path}","compare_url":"https://api.github.com/repos/jackyzy823/streamlink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jackyzy823/streamlink/merges","archive_url":"https://api.github.com/repos/jackyzy823/streamlink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jackyzy823/streamlink/downloads","issues_url":"https://api.github.com/repos/jackyzy823/streamlink/issues{/number}","pulls_url":"https://api.github.com/repos/jackyzy823/streamlink/pulls{/number}","milestones_url":"https://api.github.com/repos/jackyzy823/streamlink/milestones{/number}","notifications_url":"https://api.github.com/repos/jackyzy823/streamlink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jackyzy823/streamlink/labels{/name}","releases_url":"https://api.github.com/repos/jackyzy823/streamlink/releases{/id}","deployments_url":"https://api.github.com/repos/jackyzy823/streamlink/deployments","created_at":"2018-07-17T13:40:23Z","updated_at":"2018-07-17T13:40:27Z","pushed_at":"2018-07-20T14:59:26Z","git_url":"git://github.com/jackyzy823/streamlink.git","ssh_url":"git@github.com:jackyzy823/streamlink.git","clone_url":"https://github.com/jackyzy823/streamlink.git","svn_url":"https://github.com/jackyzy823/streamlink","homepage":"https://streamlink.github.io/","size":34331,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"streamlink:master","ref":"master","sha":"6d22855cb2297f6d008e8c7f8cedaaa31f002123","user":{"login":"streamlink","id":22243823,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjQzODIz","avatar_url":"https://avatars0.githubusercontent.com/u/22243823?v=4","gravatar_id":"","url":"https://api.github.com/users/streamlink","html_url":"https://github.com/streamlink","followers_url":"https://api.github.com/users/streamlink/followers","following_url":"https://api.github.com/users/streamlink/following{/other_user}","gists_url":"https://api.github.com/users/streamlink/gists{/gist_id}","starred_url":"https://api.github.com/users/streamlink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/streamlink/subscriptions","organizations_url":"https://api.github.com/users/streamlink/orgs","repos_url":"https://api.github.com/users/streamlink/repos","events_url":"https://api.github.com/users/streamlink/events{/privacy}","received_events_url":"https://api.github.com/users/streamlink/received_events","type":"Organization","site_admin":false},"repo":{"id":68402336,"node_id":"MDEwOlJlcG9zaXRvcnk2ODQwMjMzNg==","name":"streamlink","full_name":"streamlink/streamlink","owner":{"login":"streamlink","id":22243823,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjQzODIz","avatar_url":"https://avatars0.githubusercontent.com/u/22243823?v=4","gravatar_id":"","url":"https://api.github.com/users/streamlink","html_url":"https://github.com/streamlink","followers_url":"https://api.github.com/users/streamlink/followers","following_url":"https://api.github.com/users/streamlink/following{/other_user}","gists_url":"https://api.github.com/users/streamlink/gists{/gist_id}","starred_url":"https://api.github.com/users/streamlink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/streamlink/subscriptions","organizations_url":"https://api.github.com/users/streamlink/orgs","repos_url":"https://api.github.com/users/streamlink/repos","events_url":"https://api.github.com/users/streamlink/events{/privacy}","received_events_url":"https://api.github.com/users/streamlink/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/streamlink/streamlink","description":"CLI for extracting streams from various websites to a video player of your choosing","fork":false,"url":"https://api.github.com/repos/streamlink/streamlink","forks_url":"https://api.github.com/repos/streamlink/streamlink/forks","keys_url":"https://api.github.com/repos/streamlink/streamlink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/streamlink/streamlink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/streamlink/streamlink/teams","hooks_url":"https://api.github.com/repos/streamlink/streamlink/hooks","issue_events_url":"https://api.github.com/repos/streamlink/streamlink/issues/events{/number}","events_url":"https://api.github.com/repos/streamlink/streamlink/events","assignees_url":"https://api.github.com/repos/streamlink/streamlink/assignees{/user}","branches_url":"https://api.github.com/repos/streamlink/streamlink/branches{/branch}","tags_url":"https://api.github.com/repos/streamlink/streamlink/tags","blobs_url":"https://api.github.com/repos/streamlink/streamlink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/streamlink/streamlink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/streamlink/streamlink/git/refs{/sha}","trees_url":"https://api.github.com/repos/streamlink/streamlink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/streamlink/streamlink/statuses/{sha}","languages_url":"https://api.github.com/repos/streamlink/streamlink/languages","stargazers_url":"https://api.github.com/repos/streamlink/streamlink/stargazers","contributors_url":"https://api.github.com/repos/streamlink/streamlink/contributors","subscribers_url":"https://api.github.com/repos/streamlink/streamlink/subscribers","subscription_url":"https://api.github.com/repos/streamlink/streamlink/subscription","commits_url":"https://api.github.com/repos/streamlink/streamlink/commits{/sha}","git_commits_url":"https://api.github.com/repos/streamlink/streamlink/git/commits{/sha}","comments_url":"https://api.github.com/repos/streamlink/streamlink/comments{/number}","issue_comment_url":"https://api.github.com/repos/streamlink/streamlink/issues/comments{/number}","contents_url":"https://api.github.com/repos/streamlink/streamlink/contents/{+path}","compare_url":"https://api.github.com/repos/streamlink/streamlink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/streamlink/streamlink/merges","archive_url":"https://api.github.com/repos/streamlink/streamlink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/streamlink/streamlink/downloads","issues_url":"https://api.github.com/repos/streamlink/streamlink/issues{/number}","pulls_url":"https://api.github.com/repos/streamlink/streamlink/pulls{/number}","milestones_url":"https://api.github.com/repos/streamlink/streamlink/milestones{/number}","notifications_url":"https://api.github.com/repos/streamlink/streamlink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/streamlink/streamlink/labels{/name}","releases_url":"https://api.github.com/repos/streamlink/streamlink/releases{/id}","deployments_url":"https://api.github.com/repos/streamlink/streamlink/deployments","created_at":"2016-09-16T17:52:50Z","updated_at":"2018-07-20T15:31:11Z","pushed_at":"2018-07-20T14:59:27Z","git_url":"git://github.com/streamlink/streamlink.git","ssh_url":"git@github.com:streamlink/streamlink.git","clone_url":"https://github.com/streamlink/streamlink.git","svn_url":"https://github.com/streamlink/streamlink","homepage":"https://streamlink.github.io/","size":34323,"stargazers_count":2333,"watchers_count":2333,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":254,"mirror_url":null,"archived":false,"open_issues_count":105,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":254,"open_issues":105,"watchers":2333,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/1949"},"html":{"href":"https://github.com/streamlink/streamlink/pull/1949"},"issue":{"href":"https://api.github.com/repos/streamlink/streamlink/issues/1949"},"comments":{"href":"https://api.github.com/repos/streamlink/streamlink/issues/1949/comments"},"review_comments":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/1949/comments"},"review_comment":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/streamlink/streamlink/pulls/1949/commits"},"statuses":{"href":"https://api.github.com/repos/streamlink/streamlink/statuses/c101f9daa3a25a2c2dd23e32ac4ce8d3a1660853"}},"author_association":"NONE"}}
{"actor":{"display_login":"beardypig"}}