File size: 4,030 Bytes
a7ac876
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import pandas as pd
from utils import fetch_news_data 


def gradio_interface(company_name, article_number):
    news_df_output = pd.DataFrame(columns=["Title", "Source"])
    json_summary = {}
    english_news_list = []
    hindi_news_list = []
    # hindi_news_text = None
    hindi_news_audio = None
    pie_chart = None
    bar_chart = None

    for result in fetch_news_data(company_name, int(article_number)):
        news_df_output = result.get("news_df_output", news_df_output)
        json_summary = result.get("json_summary", json_summary)
        english_news_list = result.get("english_news_list", english_news_list)
        hindi_news_list = result.get("hindi_news_list", hindi_news_list)
        # hindi_news_text = result.get("hindi_news_text", hindi_news_text)
        hindi_news_audio = result.get("hindi_news_audio", hindi_news_audio)
        pie_chart = result.get("pie_chart", pie_chart)
        bar_chart = result.get("bar_chart", bar_chart)

        yield news_df_output, json_summary, english_news_list, hindi_news_list, hindi_news_audio, pie_chart, bar_chart

with gr.Blocks(css=".btn-green { background-color: #2E7D32 !important; color: white !important; }") as interface:
    gr.Markdown("# Live Company News Analyzer")
    gr.Markdown("## A Project by Sara Nimje")
    gr.Markdown("Enter a company name to fetch news, sentiment analysis, and more.")

    with gr.Row():
        company_name_input = gr.Textbox(label="Company Name", placeholder="Enter company name")
        article_number_input = gr.Textbox(label="Number of Articles", placeholder="Enter number")

    with gr.Row():
        submit_btn = gr.Button("Submit", elem_classes=["btn-green"])
        clear_btn = gr.Button("Clear")

    with gr.Row():
        news_df_output = gr.Dataframe(label="News Articles", interactive=False)

    with gr.Row():
        json_summary_output = gr.JSON(label="JSON Summary")

    with gr.Row():
        english_news_output = gr.List(label="English News List")
        hindi_news_output = gr.List(label="Hindi News List")

    with gr.Row():
        # hindi_news_text_output = gr.Textbox(label="Hindi News Text", interactive=False)
        hindi_news_audio_output = gr.Audio(label="Hindi News Audio")

    with gr.Row():
        pie_chart_output = gr.Image(label="Sentiment Pie Chart")
        bar_chart_output = gr.Image(label="Sentiment Bar Chart")

    submit_event = submit_btn.click(
        gradio_interface,
        inputs=[company_name_input, article_number_input],
        outputs=[
            news_df_output,
            json_summary_output, 
            english_news_output, 
            hindi_news_output,  
            hindi_news_audio_output, 
            pie_chart_output, 
            bar_chart_output
        ]
    )

    company_name_input.submit(fn=gradio_interface, inputs=[company_name_input, article_number_input], outputs=[
        news_df_output,
        json_summary_output, 
        english_news_output, 
        hindi_news_output, 
        hindi_news_audio_output, 
        pie_chart_output, 
        bar_chart_output
    ])
    
    article_number_input.submit(fn=gradio_interface, inputs=[company_name_input, article_number_input], outputs=[
        news_df_output,
        json_summary_output, 
        english_news_output, 
        hindi_news_output, 
        hindi_news_audio_output, 
        pie_chart_output, 
        bar_chart_output
    ])

    clear_btn.click(
        lambda: ("", "", pd.DataFrame(), {}, "", "", None, None),
        inputs=[],
        outputs=[
            company_name_input, 
            article_number_input,
            news_df_output, 
            json_summary_output, 
            english_news_output, 
            hindi_news_output, 
            hindi_news_audio_output, 
            pie_chart_output, 
            bar_chart_output
        ]
    )

# launch app
if __name__ == "__main__":
    interface.launch()