def get_research_articles(self, max_num): # Search string for Google Scholar to look for. # e.g. "{self.title} {self.director.name}" would equate to "Concussion Peter Landesman" for the movie Concussion. search_str = f'{self.title} {self.director.name}' output = f"" try: pg = ProxyGenerator() ip = os.environ['PROXY_IP'] pg.SingleProxy(http=ip, https=ip) o = scholarly.use_proxy(pg) search_query = scholarly.search_pubs(search_str) for i in range(0, max_num): curr = next(search_query) # For debugging purposes, this is how you pretty print the search query's contents. #scholarly.pprint(curr) # Grab the title of the article. title = curr['bib']['title'] # Begin our formatted html output for each found research article. output += f""" <li> """ # See if a publication url (i.e. curr['pub_url']) exists. If so, add an external link to it. if 'pub_url' in curr: output += f""" <a target='_blank' href=\"{curr['pub_url']}\">{title}</a> """ else: output += f""" {title} """ output += f""" <br> """ # Writes the abstract (i.e.curr['bib']['abstract']) if it exists. if 'bib' in curr and 'abstract' in curr['bib']: output += f""" <p>{curr['bib']['abstract']}</p> """ output += f""" </li> """ except Exception as e: pass # Useful for seeing errors in your terminal. Replace pass with the print statement below. #print(sys.stderr, e) return output
from scholarly import scholarly import yaml # something like ssh -D 9050 -q -C -N [email protected] from scholarly import scholarly, ProxyGenerator # default values are shown below proxies = { 'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050' } pg = ProxyGenerator() pg.SingleProxy(**proxies) scholarly.use_proxy(pg) # Retrieve the author's data, fill-in, and print #author=scholarly.search_author_id('4poYWhEAAAAJ') search_query = scholarly.search_author('Vassil Vassilev') while True: print("Iter") try: author = next(search_query).fill() if 'cern' in author.email: break #print(author) except StopIteration: break #sys.exit(1) print(author) print("Titles")
def set_proxy(): if ALLOW_PROXY_ON_SCHOLAR: pg = ProxyGenerator() pg.SingleProxy(http_proxy, https_proxy) scholarly.use_proxy(pg)
async def __call__(self): UserCancel = KeyboardInterrupt # region various embed types creation def publication_embeds(result) -> discord.Embed: embed = discord.Embed( title=result["bib"]["title"], description=result["bib"]["abstract"], url=result["eprint_url"] if "eprint_url" in result.keys() else result["pub_url"], ) embed.add_field( name="Authors", value=", ".join(result["bib"]["author"]).strip(), inline=True, ) embed.add_field(name="Publisher", value=result["bib"]["venue"], inline=True) embed.add_field( name="Publication Year", value=result["bib"]["pub_year"], inline=True ) embed.add_field( name="Cited By", value=result["num_citations"] if "num_citations" in result.keys() else "0", inline=True, ) embed.add_field( name="Related Articles", value=f'https://scholar.google.com{result["url_related_articles"]}', inline=True, ) embed.set_footer(text=f"Requested by {self.ctx.author}") return embed def author_embeds(result) -> discord.Embed: embed = discord.Embed(title=result["name"]) embed.add_field( name="Cited By", value=f"{result['citedby']} articles", inline=True ) embed.add_field(name="Scholar ID", value=result["scholar_id"], inline=True) embed.add_field( name="Affiliation", value=result["affiliation"] if "affiliation" in result.keys() else "None", inline=True, ) embed.add_field( name="Interests", value=f"{', '.join(result['interests']) if 'interests' in result.keys() else 'None'}", inline=True, ) embed.set_image(url=result["url_picture"]) embed.set_footer(text=f"Requested by {self.ctx.author}") return embed def citation_embeds(result) -> discord.Embed: embed = discord.Embed( title=result["bib"]["title"], description=f"```{scholarly.bibtex(result)}```", url=result["eprint_url"] if "eprint_url" in result.keys() else result["pub_url"], ) embed.set_footer(text=f"Requested by {self.ctx.author}") return embed # endregion try: # region user flags processing pg = ProxyGenerator() proxy = FreeProxy(rand=True, timeout=1, country_id=["BR"]).get() pg.SingleProxy(http=proxy, https=proxy) scholarly.use_proxy(pg) # self.args processing if self.args is None: results = [next(scholarly.search_pubs(self.query)) for _ in range(5)] embeds = list(map(publication_embeds, results)) elif "author" in self.args: results = [ next(scholarly.search_author(self.query)) for _ in range(5) ] embeds = list(map(author_embeds, results)) elif "cite" in self.args: results = scholarly.search_pubs(self.query) results = [results for _ in range(5)] embeds = list(map(citation_embeds, results)) else: await self.message.edit(content="Invalid flag") return # endregion # sets the reactions for the search result if len(embeds) > 1: buttons = [[ {Button(style=ButtonStyle.grey, label="◀️", custom_id="◀️"): None}, {Button(style=ButtonStyle.red, label="🗑️", custom_id="🗑️"): None}, {Button(style=ButtonStyle.grey, label="▶️", custom_id="▶️"): None} ]] else: buttons = [[ Button(style=ButtonStyle.red, label="🗑️", custom_id="🗑️") ]] await Sudo.multi_page_system(self.bot, self.ctx, self.message, tuple(embeds), buttons) return except asyncio.TimeoutError: raise except (asyncio.CancelledError, discord.errors.NotFound): pass except scholarly_exceptions._navigator.MaxTriesExceededException: await self.message.edit( content="Google Scholar is currently blocking our requests. Please try again later" ) Log.append_to_log(self.ctx, f"{self.ctx.command} error", "MaxTriesExceededException") return except Exception as e: await error_handler(self.bot, self.ctx, e, self.query) finally: return
from scholarly import scholarly from OSMPythonTools.nominatim import Nominatim from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt from fp.fp import FreeProxy from scholarly import ProxyGenerator from time import sleep pg = ProxyGenerator() proxy = FreeProxy(rand=True, timeout=1, country_id=['BR']).get() pg.SingleProxy(http=proxy, https=proxy) scholarly.use_proxy(pg) def plot_citations(author_name): m = Basemap(projection='mill', lon_0=180) m.drawmapboundary(fill_color='aqua') m.fillcontinents(color='coral', lake_color='aqua') search_query = scholarly.search_author(author_name) author = next(search_query).fill() print(author) for pub in [author.publications[0]]: print('Title: ', pub.bib['title']) pub = pub.fill() sleep(45) for citation in pub.citedby: print(citation) sleep(45) firstAuthorId = None while firstAuthorId is None or len(citation.bib['author_id']) == 0: