mirror of
https://github.com/chibicitiberiu/ytsm.git
synced 2024-02-24 05:43:31 +00:00
Added install instructions to readme.
This commit is contained in:
parent
5d65552852
commit
19d57c4200
209
.idea/workspace.xml
generated
209
.idea/workspace.xml
generated
@ -2,7 +2,8 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="245751b6-c863-4572-8723-8499964fe105" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/YtManager/settings.py" beforeDir="false" afterPath="$PROJECT_DIR$/YtManager/settings.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/readme.md" beforeDir="false" afterPath="$PROJECT_DIR$/readme.md" afterDir="false" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
@ -148,9 +149,9 @@
|
||||
<entry key="auth_group" value="1" />
|
||||
<entry key="gitignore" value="1" />
|
||||
<entry key="html" value="3" />
|
||||
<entry key="ini" value="2" />
|
||||
<entry key="md" value="5" />
|
||||
<entry key="py" value="35" />
|
||||
<entry key="ini" value="5" />
|
||||
<entry key="md" value="6" />
|
||||
<entry key="py" value="39" />
|
||||
<entry key="scss" value="2" />
|
||||
<entry key="ytmanagerapp_channel" value="1" />
|
||||
<entry key="ytmanagerapp_subscription" value="2" />
|
||||
@ -161,10 +162,10 @@
|
||||
<counts>
|
||||
<entry key="Database Element" value="7" />
|
||||
<entry key="HTML" value="3" />
|
||||
<entry key="Ini" value="2" />
|
||||
<entry key="Markdown" value="5" />
|
||||
<entry key="Ini" value="5" />
|
||||
<entry key="Markdown" value="6" />
|
||||
<entry key="PLAIN_TEXT" value="1" />
|
||||
<entry key="Python" value="35" />
|
||||
<entry key="Python" value="39" />
|
||||
<entry key="SCSS" value="2" />
|
||||
</counts>
|
||||
</usages-collector>
|
||||
@ -172,43 +173,85 @@
|
||||
<counts>
|
||||
<entry key="Django Console" value="155" />
|
||||
<entry key="ini" value="2" />
|
||||
<entry key="md" value="509" />
|
||||
<entry key="py" value="3244" />
|
||||
<entry key="md" value="3859" />
|
||||
<entry key="py" value="3250" />
|
||||
<entry key="py@youtube-channel-manager" value="41" />
|
||||
</counts>
|
||||
</usages-collector>
|
||||
<usages-collector id="statistics.file.types.edit">
|
||||
<counts>
|
||||
<entry key="Bash" value="4" />
|
||||
<entry key="CommandLine" value="23" />
|
||||
<entry key="Ini" value="2" />
|
||||
<entry key="Markdown" value="509" />
|
||||
<entry key="Markdown" value="3855" />
|
||||
<entry key="PLAIN_TEXT" value="18" />
|
||||
<entry key="Python" value="3399" />
|
||||
<entry key="Python" value="3405" />
|
||||
</counts>
|
||||
</usages-collector>
|
||||
</session>
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/master_default.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="300">
|
||||
<caret line="20" column="17" lean-forward="true" selection-start-line="20" selection-start-column="17" selection-end-line="20" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="135">
|
||||
<caret line="9" column="93" selection-start-line="9" selection-start-column="93" selection-end-line="9" selection-end-column="93" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
<splitter split-orientation="horizontal" split-proportion="0.84480125">
|
||||
<split-first>
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/master_default.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="300">
|
||||
<caret line="20" column="17" selection-start-line="20" selection-start-column="17" selection-end-line="20" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="405">
|
||||
<caret line="27" selection-start-line="27" selection-end-line="27" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/readme.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="390">
|
||||
<caret line="54" lean-forward="true" selection-start-line="54" selection-end-line="54" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/YtManager/wsgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="240">
|
||||
<caret line="16" selection-start-line="16" selection-end-line="16" />
|
||||
<folding>
|
||||
<element signature="e#226#235#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</split-first>
|
||||
<split-second>
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/YtManager/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="469">
|
||||
<caret line="81" column="9" selection-start-line="81" selection-end-line="81" selection-end-column="9" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</split-second>
|
||||
</splitter>
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
@ -307,7 +350,6 @@
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/views/auth.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/views/settings.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/urls.py" />
|
||||
<option value="$PROJECT_DIR$/YtManager/settings.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/utils/customconfigparser.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/utils/extended_interpolation_with_env.py" />
|
||||
<option value="$PROJECT_DIR$/config/defaults.ini" />
|
||||
@ -315,7 +357,6 @@
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/management/downloader.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/management/jobs/delete_video.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/scheduler.py" />
|
||||
<option value="$PROJECT_DIR$/readme.md" />
|
||||
<option value="$PROJECT_DIR$/external/pytaw/README.md" />
|
||||
<option value="$PROJECT_DIR$/external/pytaw/pytaw/youtube.py" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/utils/youtube.py" />
|
||||
@ -327,6 +368,8 @@
|
||||
<option value="$PROJECT_DIR$/config/config.ini" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/master_default.html" />
|
||||
<option value="$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html" />
|
||||
<option value="$PROJECT_DIR$/YtManager/settings.py" />
|
||||
<option value="$PROJECT_DIR$/readme.md" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
@ -405,33 +448,12 @@
|
||||
<path>
|
||||
<item name="youtube-channel-manager" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="youtube-channel-manager" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="config" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="youtube-channel-manager" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="youtube-channel-manager" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="static" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="youtube-channel-manager" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="youtube-channel-manager" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="static" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="youtube-channel-manager" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="youtube-channel-manager" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="templates" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="youtube-channel-manager" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="youtube-channel-manager" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="templates" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="YtManagerApp" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
@ -610,20 +632,20 @@
|
||||
<frame x="0" y="0" width="1920" height="1048" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.1913646" />
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.09808102" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info id="Favorites" order="2" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" sideWeight="0.49520257" weight="0.38152173" />
|
||||
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.5234541" weight="0.2228261" />
|
||||
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.5229211" visible="true" weight="0.175" />
|
||||
<window_info anchor="bottom" id="Cvs" order="3" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="4" weight="0.4" />
|
||||
<window_info anchor="bottom" id="Debug" order="5" sideWeight="0.49307036" visible="true" weight="0.37608695" />
|
||||
<window_info anchor="bottom" id="Debug" order="5" sideWeight="0.49307036" weight="0.37608695" />
|
||||
<window_info anchor="bottom" id="TODO" order="6" weight="0.329718" />
|
||||
<window_info anchor="bottom" id="manage.py@youtube-channel-manager" order="7" sideWeight="0.49573562" weight="0.49347827" />
|
||||
<window_info anchor="bottom" id="Docker" order="8" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Database Changes" order="9" weight="0.3285968" />
|
||||
<window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.50692964" side_tool="true" visible="true" weight="0.37608695" />
|
||||
<window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.47707888" side_tool="true" visible="true" weight="0.175" />
|
||||
<window_info anchor="bottom" id="Version Control" order="11" sideWeight="0.49840087" weight="0.15326087" />
|
||||
<window_info anchor="bottom" id="Terminal" order="12" sideWeight="0.49573562" weight="0.3576087" />
|
||||
<window_info anchor="bottom" id="Python Console" order="13" sideWeight="0.4968017" weight="0.33804348" />
|
||||
@ -667,7 +689,6 @@
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://C:/Python36/Lib/site-packages/django/db/models/fields/__init__.py" />
|
||||
<entry file="file://C:/Python36/Lib/site-packages/django/forms/models.py" />
|
||||
<entry file="file://C:/Python36/Lib/site-packages/django/contrib/auth/decorators.py" />
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/views/settings.py">
|
||||
@ -784,23 +805,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/readme.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="60">
|
||||
<caret line="4" selection-start-line="4" selection-end-line="4" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManager/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1046">
|
||||
<caret line="132" selection-start-line="132" selection-end-line="132" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="das://2dac2136-d902-4d27-8789-9371934602fd/schema/main/table/ytmanagerapp_subscription">
|
||||
<provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
|
||||
<state>
|
||||
@ -942,13 +946,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/config/config.ini">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="373">
|
||||
<caret line="44" lean-forward="true" selection-start-line="44" selection-end-line="44" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/static/YtManagerApp/css/login.scss">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
@ -959,17 +956,51 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/master_default.html">
|
||||
<entry file="file://$PROJECT_DIR$/YtManager/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="300">
|
||||
<caret line="20" column="17" lean-forward="true" selection-start-line="20" selection-start-column="17" selection-end-line="20" selection-end-column="17" />
|
||||
<state relative-caret-position="469">
|
||||
<caret line="81" column="9" selection-start-line="81" selection-end-line="81" selection-end-column="9" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="135">
|
||||
<caret line="9" column="93" selection-start-line="9" selection-start-column="93" selection-end-line="9" selection-end-column="93" />
|
||||
<state relative-caret-position="405">
|
||||
<caret line="27" selection-start-line="27" selection-end-line="27" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManagerApp/templates/YtManagerApp/master_default.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="300">
|
||||
<caret line="20" column="17" selection-start-line="20" selection-start-column="17" selection-end-line="20" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/YtManager/wsgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="240">
|
||||
<caret line="16" selection-start-line="16" selection-end-line="16" />
|
||||
<folding>
|
||||
<element signature="e#226#235#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/config/config.ini">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="14" selection-start-line="4" selection-start-column="1" selection-end-line="4" selection-end-column="14" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/readme.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="390">
|
||||
<caret line="54" lean-forward="true" selection-start-line="54" selection-end-line="54" />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -124,7 +124,7 @@ USE_TZ = True
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
MEDIA_URL = '/media/'
|
||||
MEDIA_ROOT = 'D:\\Dev\\youtube-channel-manager\\temp\\media'
|
||||
MEDIA_ROOT = 'data/media'
|
||||
|
||||
CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
||||
|
||||
|
63
readme.md
63
readme.md
@ -1,4 +1,5 @@
|
||||
#YouTube Subscription Manager
|
||||
|
||||
A self-hosted tool which manages your YouTube subscriptions, and downloads files automatically.
|
||||
|
||||
## Dependencies
|
||||
@ -11,4 +12,64 @@ A self-hosted tool which manages your YouTube subscriptions, and downloads files
|
||||
* google-api-python-client: `$ pip3 install google-api-python-client`
|
||||
* google_auth_oauthlib: `$ pip3 install google_auth_oauthlib`
|
||||
* apscheduler (v3.5+): `$ pip3 install apscheduler`
|
||||
* (recommended) oauth2client: `$ pip3 install oauth2client`
|
||||
* (recommended) oauth2client: `$ pip3 install oauth2client`
|
||||
|
||||
## Installation
|
||||
|
||||
1. Install all the dependencies listed above.
|
||||
|
||||
```bash
|
||||
sudo apt install python3 python3-pip
|
||||
sudo pip3 install apscheduler django django-crispy-forms youtube-dl google-api-python-client google_auth_oauthlib oauth2client
|
||||
```
|
||||
|
||||
2. Clone this repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/chibicitiberiu/ytsm.git
|
||||
cd ytsm
|
||||
```
|
||||
|
||||
3. Set up the database: `python3 manage.py migrate`
|
||||
|
||||
By default, a SQLite database is used, which is located in the project's folder.
|
||||
You can customize that in `YtManager/settings.py`, by modifying the `DATABASES` variable (search Django documentation for details).
|
||||
|
||||
4. Set up the `MEDIA_ROOT` variable in `YtManager/settings.py`. This is where the thumbnails will be downloaded.
|
||||
(note: this will be moved to `config.ini` in the future).
|
||||
|
||||
5. Obtain an YouTube API developer key from [https://console.developers.google.com/apis/dashboard](https://console.developers.google.com/apis/dashboard).
|
||||
You can find a detailed guide on [this page](https://www.slickremix.com/docs/get-api-key-for-youtube/).
|
||||
|
||||
The `defaults.ini` file already has an API key, but if the quotas are reached, you won't be able to use this program
|
||||
any more. Also, I might decide to delete that key, which will break your installation.
|
||||
|
||||
6. Modify `config/config.ini` to your liking. All the settings should be documented through comments.
|
||||
All these settings apply server-wide. The settings in the `user` section can be overriden from the web page for each
|
||||
individual user.
|
||||
|
||||
The most important settings are:
|
||||
|
||||
* `[Global] YoutubeApiKey` - put your YouTube API key here
|
||||
* `[User] DownloadPath` - sets the folder where videos will be downloaded
|
||||
|
||||
7. Start the server: `python3 manage.py runserver [port] --noreload`
|
||||
|
||||
The `port` parameter is optional.
|
||||
|
||||
The `--noreload` option is necessary, otherwise the scheduler will run on 2 separate processes at the same time,
|
||||
which is not ideal.
|
||||
|
||||
8. Open the server's page in your browser, by entering `http://localhost:port` in your address bar.
|
||||
|
||||
9. Create an admin user by going to the *register* page, and creating an user account.
|
||||
|
||||
10. Add some subscriptions, and enjoy!
|
||||
|
||||
### Correct deploying procedure
|
||||
|
||||
This is a *django* project, so the correct way to deploy it to a server would be by using *mod_wsgi*. Since this project
|
||||
is still in development, I haven't really thought about getting it ready for production.
|
||||
|
||||
If you are willing to try that, you can find the information on how to deploy this application on the
|
||||
[Django website](https://docs.djangoproject.com/en/2.1/howto/deployment/).
|
||||
|
Loading…
Reference in New Issue
Block a user