First Version

This commit is contained in:
aliakbar
2026-06-27 07:52:17 +03:30
commit f3d28cea99
97 changed files with 54562 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
import requests
import json
import time
import random
query = "اقتصاد مقاومتی"
session = requests.Session()
session.trust_env = False
session.proxies = {"http": None, "https": None}
headers = {
"User-Agent": "Mozilla/5.0",
"Accept": "application/json, text/plain, */*",
"Referer": "https://ganj.irandoc.ac.ir/",
"Origin": "https://ganj.irandoc.ac.ir"
}
# گرفتن abstract
def get_abstract(uid, retries=5):
url = f"https://ganj.irandoc.ac.ir/api/v1/articles/{uid}/show_abstract"
for i in range(retries):
try:
res = session.get(url, headers=headers, timeout=10)
if res.status_code == 200:
if not res.text.strip():
print(" empty → احتمال بلاک")
else:
try:
data = res.json()
abstract = data.get("abstract")
if abstract:
return abstract
except:
pass
except Exception as e:
print("Error:", e)
time.sleep(random.uniform(3, 7))
return None
# گرفتن year
def get_year(uid, retries=5):
url = f"https://ganj.irandoc.ac.ir/api/v1/articles/{uid}"
for i in range(retries):
try:
res = session.get(url, headers=headers, timeout=10)
if res.status_code == 200:
try:
data = res.json()
return data.get("ja_pub_yyyy")
except:
pass
except Exception as e:
print("Year Error:", e)
time.sleep(random.uniform(3, 7))
return None
page = 1
all_results = []
index_counter = 1
while True:
print(f"\n Fetching page {page}...")
search_url = (
"https://ganj.irandoc.ac.ir/api/v1/search/main"
f"?basicscope=1"
f"&keywords={query}"
f"&page={page}"
f"&sort_by=1"
f"&year_from=0"
f"&year_to=1405"
)
response = session.get(search_url, headers=headers)
if response.status_code != 200:
print(" خطا در سرچ")
break
data = response.json()
results = data.get("results", [])
if not results:
print(" پایان نتایج")
break
for item in results:
title = item.get("title")
uid = item.get("uuid")
link = f"https://ganj.irandoc.ac.ir/articles/{uid}" if uid else None
# چکیده + سال
abstract = None
year = None
if uid:
abstract = get_abstract(uid)
year = get_year(uid)
# نویسنده / استاد
authors, advisors = [], []
for c in item.get("contributions", []):
role = c.get("role", {}).get("title_en", "").lower()
name = c.get("researcher", {}).get("full_name_fa", "")
if role == "author" and name:
authors.append(name)
elif role == "thesis advisor" and name:
advisors.append(name)
# دانشگاه
universities = []
for p in item.get("partnerships", []):
org = p.get("organization", {})
super_org = org.get("super_organization", {})
uni = super_org.get("title") or org.get("title")
if uni:
universities.append(uni)
# مقطع
grade = item.get("grade", {}).get("title_fa")
all_results.append({
"index": index_counter,
"title": title,
"year": year,
"grade": grade,
"authors": authors,
"advisors": advisors,
"universities": universities,
"link": link,
"abstract": abstract
})
index_counter += 1
time.sleep(random.uniform(2, 5))
if len(all_results) % 15 == 0:
print("⏸ استراحت برای جلوگیری از بلاک...")
time.sleep(20)
page += 1
time.sleep(random.uniform(2, 4))
final_output = {
"query": query,
"total_results": len(all_results),
"results": all_results
}
with open("all_results.json", "w", encoding="utf-8") as f:
json.dump(final_output, f, ensure_ascii=False, indent=2)
print("\n DONE")
print("Total:", len(all_results))