jordon31 / onlysnap Goto Github PK
View Code? Open in Web Editor NEWScrape content from OnlyFans #onlyfans -- #of-scr -- #onlyfans scrape -- #onlyfans-dl -- OnlyFans content downloader -- #of scrap -- #onlysnap
Scrape content from OnlyFans #onlyfans -- #of-scr -- #onlyfans scrape -- #onlyfans-dl -- OnlyFans content downloader -- #of scrap -- #onlysnap
Hi,
the script send me this warning. Sorry I'm a beginners, so easily I can wrong something
Warning (from warnings module):
File "C:\Users\s.amista\Downloads\OnlySnap-main\OnlySnap-main\OnlySnap.py", line 353
file_type = re.findall(".\w+", source)[-1]
SyntaxWarning: invalid escape sequence '.'
Warning (from warnings module):
File "C:\Users\s.amista\Downloads\OnlySnap-main\OnlySnap-main\OnlySnap.py", line 414
ext = re.findall('.\w+?', source)
SyntaxWarning: invalid escape sequence '.'
Warning (from warnings module):
File "C:\Users\s.amista\Downloads\OnlySnap-main\OnlySnap-main\OnlySnap.py", line 506
ext = re.findall('.\w+?', source)
SyntaxWarning: invalid escape sequence '.'
= RESTART: C:\Users\s.amista\Downloads\OnlySnap-main\OnlySnap-main\OnlySnap.py
Traceback (most recent call last):
File "C:\Users\s.amista\Downloads\OnlySnap-main\OnlySnap-main\OnlySnap.py", line 7, in
import requests
ModuleNotFoundError: No module named 'requests'
I tend to download items, and then sort them out into other programs. Whenever I want to update I have to re-download everything, would it be possible to implement a date cutoff, so that only new content gets downloaded?
Really need your help with accessing auth information that will allow creators to sign into our platform using their OF account. We built a S4S platform and stuck on just auth part.
Please, can you help. I can’t see a way to capture cookies from when a user logs in. This is possible from a windows app option who has access to the browser itself but not from a website.... is this true or can we?
Since the update I get the following error:
An error has occurred: 'str' object does not support item assignment
Traceback (most recent call last):
File "G:\OF\OF-SCR\OnlySnap.py", line 816, in
SELECTED_MODELS = select_sub()
File "G:\OF\OF-SCR\OnlySnap.py", line 294, in select_sub
SUBS = get_subs()
File "G:\OF\OF-SCR\OnlySnap.py", line 273, in get_subs
sub['type'] = 'Payed'
TypeError: 'str' object does not support item assignment
Please try again.
this loops until I cancel the program.
Hi
This shows only for one model...
An error has occurred: 'NoneType' object has no attribute 'lower'
Traceback (most recent call last):
File "E:\OnlySnap-main\OnlySnap.py", line 930, in
media_downloaded = download_posts(photo_posts, False, pbar)
File "E:\OnlySnap-main\OnlySnap.py", line 492, in download_posts
if not download_tagged_posts and "spin" in post.get("text", "").lower():
AttributeError: 'NoneType' object has no attribute 'lower'
Please try again.
This is the error I get: x
x
Enter the profile name to download (use TAB for automatic completion -- Or to see the full list):
elanorose
x
The content is being downloaded to the profiles/elanorose directory using OF-SCR.
Saving profile info...
Downloading avatar...
Downloading header...
An error has occurred: expected string or bytes-like object, got 'NoneType'
Traceback (most recent call last):
File "C:\Users\Jaden\Downloads\OF-SCR-main\of-scr.py", line 591, in
media_downloaded, skipped_posts = download_posts(photo_posts, False, pbar, skip_tagged_posts=False, tag_folder="TaggedPosts") #Photo Post -- True or False -- (to decide if you want to skip posts with the tag "skip_tagged_posts)=")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\Downloads\OF-SCR-main\of-scr.py", line 392, in download_posts
was_downloaded = future.result()
^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\concurrent\futures_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\concurrent\futures_base.py", line 401, in __get_result
raise self.exception
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\Downloads\OF-SCR-main\of-scr.py", line 293, in download_media
ext = re.findall('.\w+?', source)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\re_init.py", line 216, in findall
return _compile(pattern, flags).findall(string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: expected string or bytes-like object, got 'NoneType'
Please try again.
x
x
Enter the profile name to download (use TAB for automatic completion -- Or to see the full list):
Traceback (most recent call last):
File "C:\Users\Jaden\Downloads\OF-SCR-main\of-scr.py", line 470, in
SELECTED_MODELS = select_sub()
^^^^^^^^^^^^
File "C:\Users\Jaden\Downloads\OF-SCR-main\of-scr.py", line 212, in select_sub
MODELS = prompt("\nEnter the profile name to download (use TAB for automatic completion -- Or to see the full list):\n\n", completer=username_completer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 1420, in prompt
return session.prompt(
^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 1035, in prompt
return self.app.run(
^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\site-packages\prompt_toolkit\application\application.py", line 961, in run
return loop.run_until_complete(coro)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 640, in run_until_complete
self.run_forever()
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\asyncio\windows_events.py", line 321, in run_forever
super().run_forever()
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 607, in run_forever
self._run_once()
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 1922, in _run_once
handle._run()
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\asyncio\events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\site-packages\prompt_toolkit\application\application.py", line 875, in run_async
return await _run_async(f)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jaden\AppData\Local\Programs\Python\Python311\Lib\site-packages\prompt_toolkit\application\application.py", line 740, in _run_async
result = await f
^^^^^^^
KeyboardInterrupt
^C
An error has occurred: [WinError 5] Access is denied: 'profiles'
Traceback (most recent call last):
File "C:\Users\paper\Desktop\OF-SCR-main\of-scr.py", line 540, in
assure_dir("profiles")
File "C:\Users\paper\Desktop\OF-SCR-main\of-scr.py", line 76, in assure_dir
os.makedirs(path, exist_ok=True)
File "", line 225, in makedirs
PermissionError: [WinError 5] Access is denied: 'profiles'
Please try again.
Enter the profile name to download (use TAB for to see the full list):
onlyfans-dl, the project upon which the code in this repository is almost entirely based, is licensed under the terms of GPLv3. You have copied our code and made trivial changes to the script and the readme, which is no problem, except you also deleted the license text. Under the terms of GPLv3, you are legally obligated to also release your modified version of our code under the terms of the GPLv3. Please fix this as soon as you are able.
Also, the GPL does not require you to credit us for copying our code and making changes to it, but it is extremely lame how you just deleted all forms of credit to the original project you got 95% of this code from. Stop being a skid.
Finally, it was really annoying having to go through and delete all your spam comments. Please stop spamming links to your repo in the issues of my repo or I'm reporting you to GitHub.
An error has occurred: string indices must be integers, not 'str'
Traceback (most recent call last):
File "E:\OnlySnap.py", line 871, in
photo_posts = get_all_photos(photos)
^^^^^^^^^^^^^^^^^^^^^^
File "E:\OnlySnap.py", line 686, in get_all_photos
getdata={"limit": "999999", "order": "publish_date_desc", "beforePublishTime": images[-1]["postedAtPrecise"] if images else None},
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
TypeError: string indices must be integers, not 'str'
Please try again.
sorry for delay
I don't know if it's okay to post here, but recently, I have followed a lot of girls. However, a lot of them promote each other at the end of each post, where they feature a promoted girl and leave a #ad. Is there any way we can skip those promotions?
This should be a very specific use case, but a great/unique feature nonetheless. When checking for existing downloads, check for the name of the file alone, excluding extension.
Why? Because I just downloaded a profile that takes up 74GB of .mp4
videos and 6GB of .jpg
photos which I'm looking into converting to AV1 (commonly .mkv
) and Jpeg XL (.jxl
).
It'd be the best for data hoarders without forcing us to download all the files again and then deleting the existing ones.
just installed and getting this error.
File "/Users/jktz/OF-SCR-main/of-scr.py", line 10, in <module> import emoji ModuleNotFoundError: No module named 'emoji'
when i select the *** download All models*** it works but after a while it crashes and i get this error
An error has occurred: 'text'
Traceback (most recent call last):
File "C:\Users\mikep\Desktop\OF-SCR-main\of-scr.py", line 646, in
media_downloaded = download_posts(photo_posts, False, pbar)
File "C:\Users\mikep\Desktop\OF-SCR-main\of-scr.py", line 396, in download_posts
if post["text"] is not None and ("@" in post["text"].lower() or "#adv" in post["text"].lower() or "#ad" in post["text"].lower()):
KeyError: 'text'
also thanks for keeping this updated!
EDIT: i find the user: Meepmomentt (this is the user thats crashing it for some reason)
hi ,
i have correclty rename but :
FileNotFoundError: [Errno 2] No such file or directory: 'Configs\OnlyFans\Config.json'
~ (^.^) Hello! :> ~
x
ERROR: Access denied.
PS E:\1 Onlyfans\OF-SCR-main>
This is the error I get when I try to run of-scr.py in the folder.
I tried using administrator to run Powershell and everything. Is it an Onlyfans API change? I don't know. Maybe i'm missing something obvious since i'm kind of a noob at Python, but I just wanted to let you know about it.
Is there not a way with an option to go through the subscribed list and download the new content? I say this because I have 20 subscriptions and I have to download it one by one
I am on MacOS 12, here's the error:
jaden@UltraYummyBlade OF-SCR-main % python3 of-scr.py
Traceback (most recent call last):
File "/Users/jaden/Downloads/OF-SCR-main/of-scr.py", line 21, in
ctypes.windll.kernel32.SetConsoleTitleW("OF-SCR") #Title Application Windows
^^^^^^^^^^^^^
AttributeError: module 'ctypes' has no attribute 'windll'
jaden@UltraYummyBlade OF-SCR-main %
Right now, many scripts like yours and https://github.com/k0rnh0li0/onlyfans-dl just download either pictures or media.
What I desire is for each model, download posts including the title and content:
<model>
├── posts
│ ├── 2023-07-23T01_12_47
│ │ ├── 2929748474.jpg
│ │ └── _text.txt
│ ├── 2023-07-23T13_27_24
│ │ ├── 2929748723.jpg
│ │ └── _text.txt
│ ├── 2023-07-23T17_00_08
...
It makes it nicer to understand why the pictures are there :)
example in download loop (onlyfans-dl, not sure how it works with your futures)
downloaded_files = []
for media in post["media"]:
if "source" in media:
downloaded = download_media(media, is_archived, post.get("text"))
if downloaded:
downloaded_files.append(downloaded)
if downloaded_files and "postedAt" in post:
post_datetime = post["postedAt"].split("+")
post_dir = post_datetime[0].replace(":", "_")
full_dir = f"profiles/{PROFILE}/posts/{post_dir}"
if not os.path.isdir(full_dir):
assure_dir(full_dir)
if post.get("text") and not os.path.isfile(f"{full_dir}/_text.txt"):
with open(f"{full_dir}/_text.txt", "w") as f:
f.write(post["text"])
for local_path, filename in downloaded_files:
if not os.path.isfile(f"{full_dir}/{filename}"):
shutil.copy2(local_path, f"{full_dir}/{filename}")
Cannot be run directly from terminal (with ./OnlySnap.py
) due to missing a shebang line.
Is there a way to enable the download of @ and #adv posts that are currently skipped when you want them to be?
Does it Download the Private Message Content?
If yes then it would be nice to have an extra option to only download that or something <3
OF seems to have changed their behavior when detecting that an API is trying to communicate with them. I tested it now a couple of times and I'm sure that the current behavior is as follows:
I don't know if this invalidates OnlySnap completely for usage or if there could be an alternative to avoid this behavior.
File "C:\Users*******\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\requests\models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\json_init_.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\OnlySnap-main\OnlySnap.py", line 1030, in
photo_posts = get_all_photos(photos)
^^^^^^^^^^^^^^^^^^^^^^
File "E:\OnlySnap-main\OnlySnap.py", line 840, in get_all_photos
extra_img_posts = future.result()
^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures_base.py", line 401, in __get_result
raise self._exception
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(self.args, self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\OnlySnap-main\OnlySnap.py", line 169, in api_request
num_posts = len(response.json()) if isinstance(response.json(), list) else 0
^^^^^^^^^^^^^^^
File "C:\Users****\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\requests\models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
What's the error? File exist in the folder, I didn't modified it
An error has occurred: [Errno 2] No such file or directory: 'Configs\OnlyFans\Config.json'
Traceback (most recent call last):
File "c:\Users\s.amista\Documents\NZD_PY\OnlySnap-main\OnlySnap.py", line 938, in
media_downloaded = download_posts(photo_posts, False, pbar)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\s.amista\Documents\NZD_PY\OnlySnap-main\OnlySnap.py", line 536, in download_posts
was_downloaded = future.result()
^^^^^^^^^^^^^^^
File "C:\Users\s.amista\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Users\s.amista\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures_base.py", line 401, in __get_result
raise self._exception
File "C:\Users\s.amista\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\s.amista\Documents\NZD_PY\OnlySnap-main\OnlySnap.py", line 435, in download_media
folder_name = get_year_folder(timestamp, type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\s.amista\Documents\NZD_PY\OnlySnap-main\OnlySnap.py", line 363, in get_year_folder
with open(config_path, 'r') as f:
^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'Configs\OnlyFans\Config.json'
hi, i have this error:
An error has occurred: 'str' object does not support item assignment
Traceback (most recent call last):
File "D:\downloads\OF\OF-SCR\OnlySnap\OnlySnap.py", line 816, in
SELECTED_MODELS = select_sub()
^^^^^^^^^^^^
File "D:\downloads\OF\OF-SCR\OnlySnap\OnlySnap.py", line 294, in select_sub
SUBS = get_subs()
^^^^^^^^^^
File "D:\downloads\OF\OF-SCR\OnlySnap\OnlySnap.py", line 273, in get_subs
sub['type'] = 'Payed'
~~~^^^^^^^^
TypeError: 'str' object does not support item assignment
Please try again.
Never seen this before and I don’t see a way to debug it.
but I get the error ERROR: Please refresh the pag
hi,
i like your script. but how abount to download statuses, streams and messages(inc. photos and videos) ?
and a way to run the script headless - passing -all parameter
hey when i run this i get spammed with this https://pastebin.com/bJmiU2G2 it spams it over and over
After updating the requirements, I run the file but I get these errors, what could it be?
https://i.imgur.com/WfI4IpR.png
I've subscribed to a handful of new subs and onlysnap isn't picking up any of them. Anyone know why?
I've tried logging out and providing all new credentials. That didn't fix it.
Hello, the program is not downloading all the media,
and
is it possible to put all the media in a single folder?
An error has occurred: 'str' object does not support item assignment
Traceback (most recent call last):
File "K:\Downloads\onlyfans\onlyfans-dl-4\OnlySnap\OnlySnap.py", line 808, in
SELECTED_MODELS = select_sub()
^^^^^^^^^^^^
File "K:\Downloads\onlyfans\onlyfans-dl-4\OnlySnap\OnlySnap.py", line 295, in select_sub
SUBS = get_subs()
^^^^^^^^^^
File "K:\Downloads\onlyfans\onlyfans-dl-4\OnlySnap\OnlySnap.py", line 274, in get_subs
sub['type'] = 'Payed'
~~~^^^^^^^^
TypeError: 'str' object does not support item assignment
Please try again.
tried python 3.9 3.11.4 and 3.12.0b4
An error has occurred: [Errno 2] No such file or directory: 'Configs\OnlyFans\Config.json'
Traceback (most recent call last):
File "C:\Users\elias\Desktop\v2\v3\OnlySnap-main\OnlySnap.py", line 930, in
media_downloaded = download_posts(photo_posts, False, pbar)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elias\Desktop\v2\v3\OnlySnap-main\OnlySnap.py", line 536, in download_posts
was_downloaded = future.result()
^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1520.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1520.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures_base.py", line 401, in __get_result
raise self._exception
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1520.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elias\Desktop\v2\v3\OnlySnap-main\OnlySnap.py", line 435, in download_media
folder_name = get_year_folder(timestamp, type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elias\Desktop\v2\v3\OnlySnap-main\OnlySnap.py", line 363, in get_year_folder
with open(config_path, 'r') as f:
^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'Configs\OnlyFans\Config.json'
No models subbed
but in fact ,it have a lot
Something in the API might have changed, but for some profiles, the source for videos are NoneType and it is impossible to download the videofile. Photos are all downloaded, video folder is empty.
at random the download gets stuck. internet connection works and quitting and re starting the scrape doesnt resume from where it left off
When running this on a Linux server, this program creates both Media/Photos, and Media/photos, which are two different folders on Linux, and then only puts files in Media/photos. The script should be consistent with capitalization of folders.
I got this error when I start it up:
https://pastebin.com/6n6uiZRt
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.