def add_single_video(youtube_link):
    pattern = r'(\/watch.*)'

    try:
        database = Database()
        video_id = re.split(pattern, youtube_link)[1]

        if database.get_by_link(video_id):
            print("Já cadastrado no banco: {}".format(video_id))
            return False
        video_json_data = parse_video_page(video_id)
        if (not video_json_data):
            return False

        p = compute_prediction(video_json_data)

        video_id = video_id
        data_front = {
            "title": video_json_data['title'],
            "score": float(p),
            "video_id": video_id,
            "thumbnail": video_json_data['thumbnail']
        }
        data_front['update_time'] = time.time_ns()
        database.save_recomendation(data_front, 1)
    except Exception as err:
        return False

    return True
def update_db():
    try:
        database = Database()
        for query in queries:
            
            for page in range(1,4):
                print(query, page)
                search_page = download_search_page(query, page)
                video_list = parse_search_page(search_page)
                df_videos = pd.DataFrame(video_list)
                for video in df_videos['link'].unique():
                    if database.get_by_link(video):
                        print("Já cadastrado no banco: {}".format(video))
                        continue
                    video_json_data = parse_video_page(video)
                    if(not video_json_data):
                        continue
                    
                    p = compute_prediction(video_json_data)

                    video_id = video
                    data_front = {"title": video_json_data['title'], "score": float(p), "video_id": video_id, "thumbnail": video_json_data['thumbnail']}
                    data_front['update_time'] = time.time_ns()

                    print(video_id, json.dumps(data_front))
                    database.save_recomendation(data_front)
    except Exception as identifier:
        # os.remove("novos_videos.json")
        print(identifier)
        raise Exception('Internal Server Error')
    return True
def main():
    st.header("Recomendador de vídeos do Youtube")

    st.subheader("Sobre o projeto")
    st.write(
        'Recomendador de videos criado no curso "Como Criar uma Solução Completa de Data Science" do Mario Filho.'
    )
    st.write(
        '''Nas aulas foi demonstrado métodos de busca de dados do Youtube bem como alguns modelos de classificação
    e o deploy de uma aplicação utilizando o framework flask lendo de uma pequena base de registros em json.'''
    )

    st.write(
        '''Para o presente projeto o FrontEnd foi migrado para o Streamlit devido a facilidade de utilizar
    alguns elementos visuais, também foi removido o o arquivo json e todo o acesso é feito via banco de dados SqLite3.'''
    )

    st.subheader("Coleta de dados e recomendação de novos vídeos")
    st.write(
        '''Considerando que o recomendador trata apenas de vídeos de Machine Learning e Data Science foi agendado alguns cron jobs
    para buscar, salvar e fazer a recomendação de novos vídeos uma vez por semana.'''
    )
    st.write(
        '''Uma vez por mês o modelo será treinado novamente com vídeos os videos antigos e novos de forma a melhorar cada vez mais o score
    com base em vídeos que eu forem marcados como Gostei ou Não Gostei.''')

    st.header("Ultimas recomendações: ")
    videos = []
    database = Database()
    videos = database.show_videos()
    for video in videos:
        id, title, video_link, thumbnail, score, liked = video
        score = round(score * 100, 2)
        st.markdown("[{title}](https://youtube.com/{url})".format(
            title=title, url=video_link))
        st.write(
            f'<iframe width="680" height="400" src="https://youtube.com/embed/{video_id(video_link)}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
            unsafe_allow_html=True,
        )

        st.text(f"Score: {score}%")

        options = ('Não gostei', 'Gostei')
        gostei = st.radio('Marcar vídeo:', options, liked, key=id)

        if gostei == 'Gostei':
            set_liked_video(1, id)
        else:
            set_liked_video(0, id)

        st.markdown("---")
def set_liked_video(value, id):
    ''' calls method that will set video as liked or not '''
    database = Database()
    database.like_video(value, id)
Exemple #5
0
def main():
    st.header("Recomendador de vídeos do Youtube")

    st.subheader("Sobre o projeto")
    st.write(
        'Recomendador de videos criado no curso "Como Criar uma Solução Completa de Data Science" do Mario Filho.'
    )
    st.write(
        '''Nas aulas foi demonstrado métodos de busca de dados do Youtube bem como alguns modelos de classificação
    e o deploy de uma aplicação utilizando o framework flask lendo de uma pequena base de registros em json.'''
    )

    st.write(
        '''Para o presente projeto o FrontEnd foi migrado para o Streamlit devido a facilidade de utilizar
    alguns elementos visuais, também foi removido o o arquivo json e todo o acesso é feito via banco de dados SqLite3.'''
    )

    st.subheader("Coleta de dados e recomendação de novos vídeos")
    st.write(
        '''Considerando que o recomendador trata apenas de vídeos de Machine Learning e Data Science foi agendado alguns cron jobs
    para buscar, salvar e fazer a recomendação de novos vídeos uma vez por semana.'''
    )
    st.write(
        '''Uma vez por mês o modelo será treinado novamente com vídeos os videos antigos e novos de forma a melhorar cada vez mais o score
    com base em vídeos que eu forem marcados como Gostei ou Não Gostei.''')

    st.markdown(
        "[Clique aqui para acessar o repositório do projeto.](https://github.com/cesarvinici/recomendador-videos-deploy)"
    )

    st.markdown("---")
    database = Database()
    # if st.button("Adicionar vídeo",):
    youtube_video_url = st.sidebar.text_input(
        'Insira um link para adicionar vídeo manualmente:')
    if (youtube_video_url):
        if (add_single_video(youtube_video_url)):
            st.write("Vídeo adicionado com sucesso!")

    st.header("Ultimas recomendações: ")

    videos = []

    qtd_videos = st.sidebar.number_input('Qtd. de vídeos que deseja mostrar:',
                                         value=20,
                                         min_value=1,
                                         max_value=1000,
                                         format='%d')
    if qtd_videos:
        qtd_videos = 1 if int(qtd_videos) < 1 else qtd_videos
        videos = database.show_videos(qtd_videos)
    else:
        videos = database.show_videos()

    count = 0
    for video in videos:
        count += 1
        id, title, video_link, thumbnail, score, liked = video
        score = round(score * 100, 2)
        st.markdown("[{count} - {title}](https://youtube.com/{url})".format(
            count=count, title=title, url=video_link))
        st.write(
            f'<iframe width="680" height="400" src="https://youtube.com/embed/{video_id(video_link)}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
            unsafe_allow_html=True,
        )

        st.text(f"Score: {score}%")

        options = ('Não gostei', 'Gostei')
        gostei = st.radio('Marcar vídeo:', options, liked, key=id)

        if gostei == 'Gostei':
            set_liked_video(1, id)
        else:
            set_liked_video(0, id)

        st.markdown("---")