classZendeskReader(BaseReader):""" Zendesk reader. Reads data from a Zendesk workspace. Args: zendesk_subdomain (str): Zendesk subdomain locale (str): Locale of articles """def__init__(self,zendesk_subdomain:str,locale:str="en-us")->None:"""Initialize Zendesk reader."""self.zendesk_subdomain=zendesk_subdomainself.locale=localedefload_data(self)->List[Document]:""" Load data from the workspace. Args: workspace_id (str): Workspace ID. Returns: List[Document]: List of documents. """frombs4importBeautifulSoupresults=[]articles=self.get_all_articles()forarticleinarticles:body=article["body"]ifbodyisNone:continuesoup=BeautifulSoup(body,"html.parser")body=soup.get_text()extra_info={"id":article["id"],"title":article["title"],"url":article["html_url"],"updated_at":article["updated_at"],}results.append(Document(text=body,extra_info=extra_info,))returnresultsdefget_all_articles(self):articles=[]next_page=NonewhileTrue:response=self.get_articles_page(next_page)articles.extend(response["articles"])next_page=response["next_page"]ifnext_pageisNone:breakreturnarticlesdefget_articles_page(self,next_page:str=None):importrequestsifnext_pageisNone:url=f"https://{self.zendesk_subdomain}.zendesk.com/api/v2/help_center/{self.locale}/articles?per_page=100"else:url=next_pageresponse=requests.get(url)response_json=json.loads(response.text)next_page=response_json.get("next_page",None)articles=response_json.get("articles",[])return{"articles":articles,"next_page":next_page}
defload_data(self)->List[Document]:""" Load data from the workspace. Args: workspace_id (str): Workspace ID. Returns: List[Document]: List of documents. """frombs4importBeautifulSoupresults=[]articles=self.get_all_articles()forarticleinarticles:body=article["body"]ifbodyisNone:continuesoup=BeautifulSoup(body,"html.parser")body=soup.get_text()extra_info={"id":article["id"],"title":article["title"],"url":article["html_url"],"updated_at":article["updated_at"],}results.append(Document(text=body,extra_info=extra_info,))returnresults