scieloorg / articlemetaapi Goto Github PK
View Code? Open in Web Editor NEWBiblioteca que implementa o uso da API do articlemeta.
License: BSD 2-Clause "Simplified" License
Biblioteca que implementa o uso da API do articlemeta.
License: BSD 2-Clause "Simplified" License
Levantamos a hipótese de que o tempo codificação e decodificação de e para JSON possa ser mais eficiente com o uso de outra biblioteca.
Em análise recente com o @rafaelpezzuto verificamos uma melhoria importante nas requisições realizadas pelo articlemetaapi.
Identificamos que é possível melhorar o trecho: https://github.com/scieloorg/articlemetaapi/blob/master/articlemeta/client.py#L83
A idéia é tronar esse método assincrono utilizando asyncio, vejam: https://docs.python.org/3.7/library/asyncio.html
Dessa forma melhoramos o tempo de execução das requisições para o servidor Rest do Article Meta.
Literatura sobre:
Estou assumindo que na maioria das sessões onde há a interação entre aplicações cliente e o serviço ArticleMeta, registros de apenas 1 coleção são acessados. Para esses casos, seria desejavel a capacidade de definir a coleção padrão nas quais as consultas seriam executadas e desobrigar a passagem do argumento nos métodos.
Exemplo:
client = RestfulClient(use_collection='scl') # use_collection seria ou não obrigatório?
doc = client.document('S0001-37141998000300001') # scl é pesquisado
doc_ssp = client.document('S0001-37141998000300001', 'ssp') # ssp prevalece
class Value():
def create(self):
self.volume=do_func()
def remove(self):
self.volume.remove()
mock Test:
class TestValue(unittest.Testcase):
@mock.patch("docker.client.DockerClient","remove",new_callable=PropertyMock())
def test_remove(self,docker_remove):
vol_obj=Value()
vol_obj.remove()
Output:
testtools.testresult.real._StringException: Traceback (most recent call last):
File "/usr/lib/python3.6/unittest/mock.py", line 1179, in patched
return func(*args, **keywargs)
File "/tmp/tox_env/collie/tests/volumes/test_base.py", line 36, in test_remove
vol_obj.remove()
File "/tmp/tox_env/collie/volumes/base.py", line 25, in remove
self.volume.remove(force=True)
AttributeError: 'DockerVolume' object has no attribute 'volume'
Estou procurando por uma documentação, mas não encontrei nada além do readme deste repositório.
Mais especificamente, gostaria de saber se a API é capaz de realizar busca de artigos por palavras-chave, ou funciona apenas com coleções, como no exemplo do readme?
Testando o uso articlemetaapi nos deparamos com umas situação um tanto curiosa.
Realizamos o seguinte teste:
from articlemeta.client import RestfulClient
art = RestfulClient()
for d in art.documents(from_date='2020-05-15', until_date='2020-05-16'):
print(d.processing_date)
Reparem que o param until_date é dia 16/05/2020 ao rodarmos esse código identificamos que ele retorna resultado até o final do ano e não até a data informada.
Pois, bem passamos a olhar para o código do articlemetaapi e verificamos o seguinte código em client.py:47 dates_pagination
def dates_pagination(from_date, until_date):
from_date = datetime.strptime(from_date, '%Y-%m-%d')
until_date = datetime.strptime(until_date, '%Y-%m-%d')
for year in range(from_date.year, until_date.year+1):
dtbg = '%d-01-01' % year
dtnd = '%d-12-31' % year
if year == from_date.year:
yield (from_date.isoformat()[:10], dtnd)
continue
if year == until_date.year:
yield (dtbg, until_date.isoformat()[:10])
continue
yield (dtbg, dtnd)
Vejam que retorna uma dupla com data de inicio e data de fim, porém está fixado que a data de fim para cada ano sempre será 31/12, ou seja, o parâmetro until_date é despresado.
Isso é utilizado para todos os métodos que tem filtragem por data.
Estou reportando isso como bug, mas penso que a função dates_pagination foi escrita por alguém e suspeito que exista um motivo para fixar '%d-12-31' % year.
[...]
File "./dump_scielo.py", line 73, in run_article_ids
for ident in cl.documents_by_identifiers(only_identifiers=True):
File "/home/bnewbold/scratch/ingests/scielo/.venv/lib/python3.7/site-packages/articlemeta/client.py", line 496, in documents_by_identifiers
identifiers = self._do_request(url, params=params).get('objects', [])
AttributeError: 'NoneType' object has no attribute 'get'
Python version: 3.7
articlemetaapi version: 1.26.6
This error happens after many timeouts. Maybe due to HTTP 429 back-off responses? The self._do_request(url, params=params)
statement should perhaps be called first and then status checked.
Traceback (most recent call last):
File "/Users/gustavofonseca/prj/oai-pmh/tests/test_articlemeta.py", line 112, in test_get_known_resource_returns_namedtuple_resource
self.assertIsInstance(am.get('validID'), entities.Resource)
File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 290, in get
return ArticleResourceFacade(doc).to_resource()
File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 238, in to_resource
source=self.source(),
File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 211, in source
return [self.article.bibliographic_legends().get('descriptive_format')]
File "/Users/gustavofonseca/prj/envs/oai-pmh/lib/python3.6/site-packages/xylose/scielodocument.py", line 1486, in bibliographic_legends
self.issue.volume,
AttributeError: 'NoneType' object has no attribute 'volume'
Estou procurando na documentação como obter as datas de aceite e submissão de artigos. Eu também não entendi obter as listas de artigos de um certo periódico.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.