File size: 5,038 Bytes
0608f84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
736ba17
0608f84
eed954c
fa2a8b1
c74f34f
 
c4c4eff
4e2b343
c4c4eff
c74f34f
 
 
 
4e2b343
 
 
 
 
 
 
 
 
0608f84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Installations
import streamlit as st
from dotenv import dotenv_values
from googleapiclient.discovery import build
from docx import Document

# Load environment variables from the .env file into a dictionary
environment_vars = dotenv_values('.env')

# Get the credential values from the '.env' file
my_api_key = environment_vars.get("API_KEY")

# Enter your API key here
api_key = my_api_key

# Create a YouTube API client
youtube = build('youtube', 'v3', developerKey=api_key)

def main():
    # Page title and banner image
    st.title("YouTube Playlist Video Organizer")
    st.image("main.jpg")

    # Add welcome message
    st.markdown("""
    
        Welcome to the YouTube Playlist Video Organizer app! 
        This tool helps you organize videos in a YouTube playlist based on repetitive terms.
    """)
    
    # Add sidebar with additional details
    st.sidebar.markdown("""
        **How to Use:**
        - Enter the playlist URL.
        - Specify repetitive terms (comma-separated).
        - Click the "Organize Videos" button.
        - Download the organized videos document.

        Enjoy organizing your YouTube playlist effortlessly!
    """)

    # Get the playlist URL from the user
    playlist_url = st.text_input("Enter the playlist URL:")

    # Get repetitive terms from the user
    repetitive_terms = st.text_input("Enter repetitive terms (comma-separated):")
    repetitive_terms = [term.strip().upper() for term in repetitive_terms.split(',')]

    if st.button("Organize Videos"):
        organized_doc = organize_videos(playlist_url, repetitive_terms)
        st.markdown(get_download_link(organized_doc), unsafe_allow_html=True)
        display_organized_videos(organized_doc)

def organize_videos(playlist_url, repetitive_terms):
    # Create a Word document
    doc = Document()

    # Get the playlist ID from the URL
    playlist_id = playlist_url.split("list=")[1]

    # Define the repetitive terms and headings
    headings = {}

    # Get all the video details from the playlist
    videos = []
    next_page_token = None

    while True:
        # Get the playlist items
        playlist_items = youtube.playlistItems().list(
            part="contentDetails",
            playlistId=playlist_id,
            maxResults=50,
            pageToken=next_page_token
        ).execute()

        # Get the video IDs
        video_ids = [item['contentDetails']['videoId'] for item in playlist_items['items']]

        # Get the video details
        video_details = youtube.videos().list(
            part="snippet",
            id=','.join(video_ids)
        ).execute()

        # Add the videos to the list
        for item in video_details['items']:
            title = item['snippet']['title']
            video_id = item['id']
            video_url = f"https://www.youtube.com/watch?v={video_id}"

            # Group videos based on the repetitive terms
            found = False
            for term in repetitive_terms:
                if term in title.upper():
                    if term not in headings:
                        headings[term] = chr(len(headings) + 65)
                    videos.append({"title": title, "url": video_url, "group": headings[term]})
                    found = True
                    break

            # Add videos without repetitive terms to Introduction or Conclusion
            if not found:
                if item == video_details['items'][0]:
                    videos.append({"title": title, "url": video_url, "group": "Introduction"})
                elif item == video_details['items'][-1]:
                    videos.append({"title": title, "url": video_url, "group": "Conclusion"})

        # Check if there are more pages
        next_page_token = playlist_items.get('nextPageToken')

        if not next_page_token:
            break

    # Print the video titles and URLs grouped by the headings
    for group in sorted(headings.values()):
        doc.add_paragraph(f"\n{group}. {list(headings.keys())[list(headings.values()).index(group)]}")
        count = 1
        for video in videos:
            if video['group'] == group:
                doc.add_paragraph(f"{group}.{count} {video['title']} - {video['url']}")
                count += 1

    # Print videos without repetitive terms under Introduction or Conclusion
    for group in ["Introduction", "Conclusion"]:
        doc.add_paragraph(f"\n{group}")
        count = 1
        for video in videos:
            if video['group'] == group:
                doc.add_paragraph(f"{group}.{count} {video['title']} - {video['url']}")
                count += 1

    return doc

def get_download_link(doc):
    doc.save("organized_videos.docx")
    doc_download_link = f'<a href="organized_videos.docx" download>Click here to download the organized videos document</a>'
    return doc_download_link

def display_organized_videos(doc):
    st.subheader("Organized Videos")
    for paragraph in doc.paragraphs:
        st.write(paragraph.text)

if __name__ == "__main__":
    main()