Explorer
/proc/114/root/tmp/watch_audit_p5.py
← Zurück ↓ Download
import yaml,urllib.request,concurrent.futures,json
p='/opt/struktur/social-media-radar/watch_entities.yaml'; data=yaml.safe_load(open(p)); ents={e['entity_id']:e for e in data['watch_entities']}
ids=['murprotec_baleares','humicontrol_mallorca','humexpert_mallorca','isotec_mallorca','conforthome_mallorca','first_mallorca','porta_mallorquina','engel_voelkers_mallorca','kensington_mallorca','lucas_fox_mallorca','balearic_properties','sandberg_estates','property_care_mallorca','manage_mallorca_homes','housecare_mallorca','best_home_management','xclusive_mallorca','emerald_stay_mallorca']
def check(u):
 if not u: return {'known':False,'status':None}
 try:
  req=urllib.request.Request(u,headers={'User-Agent':'Mozilla/5.0'})
  with urllib.request.urlopen(req,timeout=15) as r: return {'known':True,'status':r.status,'final':r.url}
 except Exception as e: return {'known':True,'status':None,'error':str(e)[:100]}
rows=[]
for i in ids:
 e=ents.get(i,{})
 urls={'website':e.get('website'),'facebook':e.get('facebook_url'),'instagram':e.get('instagram_url'),'linkedin':e.get('linkedin_url'),'youtube':('https://www.youtube.com/channel/'+e['youtube_channel_id'] if e.get('youtube_channel_id','').startswith('UC') else None)}
 rows.append({'entity_id':i,'name':e.get('canonical_name'),'sector':e.get('sector'),'urls':urls})
allurls=[(r['entity_id'],k,u) for r in rows for k,u in r['urls'].items() if u]
with concurrent.futures.ThreadPoolExecutor(max_workers=12) as ex: results=dict(zip([(a,b) for a,b,u in allurls],ex.map(lambda x:check(x[2]),allurls)))
for r in rows:
 r['checks']={k:results.get((r['entity_id'],k),{'known':False,'status':None}) for k in r['urls']}
print(json.dumps(rows,ensure_ascii=False,indent=2))