davincible / gotiktoklive Goto Github PK
View Code? Open in Web Editor NEWGo library to track TikTok live streams in realtime
License: MIT License
Go library to track TikTok live streams in realtime
License: MIT License
Hello @Davincible,
The source code of this repository does not work when I want to track user's live room. It gets an unexpected status code of 200 while trying to upgrade the connection from http to webscoket. However, its javascript version of it: https://github.com/zerodytrash/TikTok-Live-Connector works as expected.
I checked all the above compared with the working solution at repository: zerodytrash/TikTok-Live-Connector. Here is what I found:
The URL for the websocket connection request is the same in both solutions, except for the room ID query parameter. The working solution includes the room ID as a query parameter using the live_id key, while the non-working solution does not. This may be required by the TikTok server to establish a connection.
The headers for the websocket connection request are different in both solutions. The working solution sends a header named x-tt-webcast-chat-version with the value of chatVersion from the webcast state object, while the non-working solution does not send any headers. This may be required by the TikTok server to verify the chat version and prevent outdated clients from connecting.
I would suggest to:
Update the URL for the websocket connection request to include the room ID as a query parameter using the live_id key.
Add a header named x-tt-webcast-chat-version with the value of chatVersion from the webcast state object when connecting to the websocket server.
I have tried to make the changes but couldn't find the webcast state information, also I found that the proto
types differs between these two repositories.
Could you please fix the issue? I will be glad to sponsor you as well.
Or does it only work for events and the chat?
this project is so great and thank you for your working.
I followed the Getting Started
in README but removed live.DownloadStream()
lines, the code stopped after print "Started polling", any suggestions?
here is the code (i omitted the proxy addr and user ID)
package main
import (
"fmt"
"github.com/Davincible/gotiktoklive"
)
func main() {
tiktok := gotiktoklive.NewTikTok()
tiktok.SetProxy("http://.........", true)
// Track a TikTok user by username
live, err := tiktok.TrackUser("......")
if err != nil {
panic(err)
}
// Receive livestream events through the live.Events channel
for event := range live.Events {
switch e := event.(type) {
// You can specify what to do for specific events. All events are listed below.
case gotiktoklive.UserEvent:
fmt.Printf("%T : %s %s\n", e, e.Event, e.User.Username)
// List viewer count
case gotiktoklive.ViewersEvent:
fmt.Printf("%T : %d\n", e, e.Viewers)
// Specify the action for all remaining events
default:
fmt.Printf("%T : %+v\n", e, e)
}
}
}
Nodejs Python C# updates are quite fast
Hi ,there! You're doing a great job, and I'm using your lib to grab stream url, but panic happens when trackuser
according to the user feedback.
logs: go-olive/olive#12 (comment)
code: https://github.com/go-olive/tv/blob/0870483c28b9581863877be8acd9f86a088252ab/tiktok.go#L36
I am getting this error message when fetching live-room information.
Started polling
panic: Failed to send request to im/fetch/: Failed to sign request: Failed to send request to webcast/sign_url/: you have exceeded the rate limit, please wait a few min
Great project! Love it. I have an issue when i try to create main class and main func and run basic commands.
For instance; when try to get live stream like this
func main() {
// Create TikTok Instance
tiktok := gotiktoklive.NewTikTok()
// Track a TikTok user by username
live, err := tiktok.TrackUser("mikailasmodays")
if err != nil {
panic(err)
}
// Start downloading stream
// Make sure you have the ffmpeg binary installed, and present in your path.
if err := live.DownloadStream(); err != nil {
panic(err)
}
}
i get an error like this;
message protobuf type has not been implemented, please report: WebcastRoomPinMessage,
CjQKFVdlYmNhc3RSb29tUGluTWVzc2FnZRCFluSwi9ee4GMYhZbA3tGFneBjIMeM/r7aMDABEp8RChYQhZawlN/WnuBjGIWWwN7RhZ3gYzABEpcQCIGIipCE9ejrYBoh8J+UpVTDnExBWVnwn5SlQXogaW5zYW4gw7Z6IGluc2FuSpIDCqgBaHR0cHM6Ly9wMTYtc2lnbi12YS50aWt0b2tjZG4uY29tL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvNGYxNDk0YjE4YWI5MmI3YTIzNDM2OWU3NGYxNTU5NmF+YzVfMTAweDEwMC53ZWJwP3gtZXhwaXJlcz0xNjczNzMwMDAwJngtc2lnbmF0dXJlPXVtclBRSERzaW9Cb29MQSUyRkI0UVNRS25pM25ZJTNECqYBaHR0cHM6Ly9wMTYtc2lnbi12YS50aWt0b2tjZG4uY29tL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvNGYxNDk0YjE4YWI5MmI3YTIzNDM2OWU3NGYxNTU5NmF+YzVfMTAweDEwMC5qcGVnP3gtZXhwaXJlcz0xNjczNzMwMDAwJngtc2lnbmF0dXJlPWVOWjBEWjNLd05jNkZiR0M0akhNZ1I2Z25NWSUzRBI8MTAweDEwMC90b3MtbWFsaXZhLWF2dC0wMDY4LzRmMTQ5NGIxOGFiOTJiN2EyMzQzNjllNzRmMTU1OTZhWpoDCqwBaHR0cHM6Ly9wMTYtc2lnbi12YS50aWt0b2tjZG4uY29tL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvNGYxNDk0YjE4YWI5MmI3YTIzNDM2OWU3NGYxNTU5NmF+YzVfMTA4MHgxMDgwLndlYnA/eC1leHBpcmVzPTE2NzM3MzAwMDAmeC1zaWduYXR1cmU9TFlOYkg2ZW9qJTJCMDdJeVZybVFlMEZwdkt4JTJCMCUzRAqoAWh0dHBzOi8vcDE2LXNpZ24tdmEudGlrdG9rY2RuLmNvbS90b3MtbWFsaXZhLWF2dC0wMDY4LzRmMTQ5NGIxOGFiOTJiN2EyMzQzNjllNzRmMTU1OTZhfmM1XzEwODB4MTA4MC5qcGVnP3gtZXhwaXJlcz0xNjczNzMwMDAwJngtc2lnbmF0dXJlPU45RWtDcWt1S2N5QUV5UTcxaFYzTEk2c2o1WSUzRBI+MTA4MHgxMDgwL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvNGYxNDk0YjE4YWI5MmI3YTIzNDM2OWU3NGYxNTU5NmGyAQgIwAsQ0BEYAroBAIICAhABqAIBsgIJdHVsYXl5czc38gJMTVM0d0xqQUJBQUFBOW1aR2V4TXgtaldxMFQyZmloMEVucXJsTEtwR0hidmhoWnBRb1dCR3VPXzBVVDBuMlNZd0RpaEZoaGdRM01oM4IEEwgCEAoYASACYgkKATASATAaATCCBBMIAhAKGAMgAmIJCgEwEgEwGgEwggSBAggBEDIYBiACUusBc3Nsb2NhbDovL3dlYmNhc3Rfd2Vidmlld19wb3B1cD91cmw9aHR0cHMlM0ElMkYlMkZpbmFwcC50aWt0b2t2LmNvbSUyRmxpdmUlMkZtb25ldGl6YXRpb24lMkZyYW5raW5nJTJGdG9wdmlldyUyRmZhcSZ3ZWJfYmdfY29sb3I9RkZGRkZGJmdyYXZpdHk9Ym90dG9tJmhlaWdodD05NzZycHgmc2hvd19tYXNrPTEmbWFza19iZ19jb2xvcj0wMDAwMDBiMyZyYWRpdXM9OCZ1c2Vfc3Bhcms9MSZyYW5rPTImc2NvcmU9MGIJCgEwEgEwGgEwggTFAwgEEBQYCCABUusCc3Nsb2NhbDovL3dlYmNhc3RfbHlueHZpZXdfcG9wdXA/dXNlX3NwYXJrPTEmdXJsPWh0dHBzJTNBJTJGJTJGbGYxNi1nZWNrby1zb3VyY2UudGlrdG9rY2RuLmNvbSUyRm9iaiUyRmJ5dGUtZ3VyZC1zb3VyY2Utc2clMkZ0aWt0b2slMkZmZSUyRmxpdmUlMkZ0aWt0b2tfbGl2ZV9yZXZlbnVlX3VzZXJfbGV2ZWxfbWFpbiUyRnNyYyUyRnBhZ2VzJTJGcHJpdmlsZWdlJTJGcGFuZWwlMkZ0ZW1wbGF0ZS5qcyZoaWRlX3N0YXR1c19iYXI9MCZoaWRlX25hdl9iYXI9MSZjb250YWluZXJfYmdfY29sb3I9MDAwMDAwMDAmaGVpZ2h0PTEyODBycHgmYmRobV9iaWQ9dGlrdG9rX2xpdmVfcmV2ZW51ZV91c2VyX2xldmVsX21haW4mdXNlX2ZvcmVzdD0xWAFiSwoBMhITNzEzODM4MTc0NzI5MjQ3NzIyMBoBMCIubW9ja19maXhfd2lkdGhfdHJhbnNwYXJlbnRfNzEzODM4MTc0NzI5MjQ3NzIyMIIEgwIIBBAyGAYgAlLrAXNzbG9jYWw6Ly93ZWJjYXN0X3dlYnZpZXdfcG9wdXA/dXJsPWh0dHBzJTNBJTJGJTJGaW5hcHAudGlrdG9rdi5jb20lMkZsaXZlJTJGbW9uZXRpemF0aW9uJTJGcmFua2luZyUyRnRvcHZpZXclMkZmYXEmd2ViX2JnX2NvbG9yPUZGRkZGRiZncmF2aXR5PWJvdHRvbSZoZWlnaHQ9OTc2cnB4JnNob3dfbWFzaz0xJm1hc2tfYmdfY29sb3I9MDAwMDAwYjMmcmFkaXVzPTgmdXNlX3NwYXJrPTEmcmFuaz0yJnNjb3JlPTBYAWIJCgEwEgEwGgEwggQVCAQQChgBIAJYAWIJCgEwEgEwGgEwggQVCAQQChgDIAJYAWIJCgEwEgEwGgEwokATNjk3ODIyNjA5MDY5MTE2NzIzMxpe8J+UpVlBWUlOSU1JWiBIRUTEsFlFTMSwRMSwUiDwn5Sl8J+RiFRFSyBTT1JVIDUwSkVUT04g8J+UpURFVEFZTEkgQkFLSU0gIFBBUkEgWUHEnk1VUlVEVVIg8J+RiHICdHKSAQYYASABKAHyARJXZWJjYXN0Q2hhdE1lc3NhZ2X4AceM/r7aMIICDwiBiIqQhPXo62CCAgIQAYgCAZAC////////////AZgChZbksIvXnuBj
panic: Connection upgrade failed: Failed to connect: unexpected HTTP response status: 200
goroutine 1 [running]:
main.main()
C:/Users/beefe/IdeaProjects/gotiktoklive/main/main.go:16 +0x325
Process finished with the exit code 2
I found user (it was on live stream, i checked my phone application also) but i didin't fetch live stream data. I download ffmpeg and add it to the PATH.
I have checked Probuf Decoder and Protobuf website but i didin't get anything... Any advice for new setup? Do i miss any third party library?
When I try to install, it outputs:
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
So then I use go install github.com/Davincible/gotiktoklive@latest
and get:
go: downloading github.com/Davincible/gotiktoklive v0.0.0-20220523132158-127857a3f5b6
go: github.com/Davincible/gotiktoklive@latest (in github.com/Davincible/[email protected]):
The go.mod file for the module providing named packages contains one or
more replace directives. It must not contain directives that would cause
it to be interpreted differently than if it were the main module.
(*TikTok).GetUserInfo
will fail for some users, regardless if they are Live. Here is a sample of the panic report:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x100 pc=0x1039c5a]
goroutine 1 [running]:
github.com/Davincible/gotiktoklive.(*TikTok).GetUserInfo([omitted])
[omitted]/github.com/!davincible/[email protected]/tiktok.go:125 +0x27a
The culprit is a map access for the user info parsed out of the webpage, line 125 of tiktok.go
:
84: func (t *TikTok) GetUserInfo(user string) (*UserInfo, error) {
...
109: // Parse json data
110: var res struct {
111: UserModule struct {
112: Users map[string]*UserInfo `json:"users"`
113: Stats map[string]UserStats `json:"stats"`
114: } `json:"UserModule"`
115: }
...
124: userInfo := res.UserModule.Users[user]
125: userInfo.Stats = res.UserModule.Stats[user]
126: return userInfo, nil
127: }
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.