File size: 1,775 Bytes
3d3d6d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import arxiv
import csv
from datetime import datetime, timedelta
from deep_translator import GoogleTranslator
import pandas as pd
import os

def fetch_and_translate():
    translator = GoogleTranslator(source="en", target="ar")

    # Date filter for last 7 days
    today = datetime.now()
    last_week = today - timedelta(days=7)

    search = arxiv.Search(
        query="arabic",
        max_results=100,
        sort_by=arxiv.SortCriterion.SubmittedDate,
        sort_order=arxiv.SortOrder.Descending,
    )

    results = []
    for result in search.results():
        if result.updated.date() >= last_week.date():
            title_ar = translator.translate(result.title.strip())
            abstract_ar = translator.translate(result.summary.strip())

            results.append({
                "Title (EN)": result.title.strip(),
                "Abstract (EN)": result.summary.strip(),
                "Title (AR)": title_ar,
                "Abstract (AR)": abstract_ar,
                "Link": result.entry_id
            })

    # Save to CSV
    filename = "arabic_papers_this_week.csv"
    pd.DataFrame(results).to_csv(filename, index=False, encoding="utf-8-sig")

    if results:
        return pd.DataFrame(results), filename
    else:
        return pd.DataFrame([{"Message": "❌ No results found this week"}]), None


with gr.Blocks() as demo:
    gr.Markdown("## 📄 Arabic Papers (This Week) with Translations")
    btn = gr.Button("Fetch Latest Papers")
    output_table = gr.DataFrame(label="Results", wrap=True)
    download = gr.File(label="Download CSV")

    btn.click(fn=fetch_and_translate, inputs=None, outputs=[output_table, download])

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)