mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-17 15:22:10 +00:00
aaa
This commit is contained in:
@@ -17,6 +17,7 @@ import random
|
|||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from logging import handlers
|
from logging import handlers
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
@@ -71,6 +72,8 @@ MUZYKA_MOJEGO_LUDU_PLAJLISTA = 30
|
|||||||
FILE_SERVICE_ADDRESS = "http://192.168.1.15:5000"
|
FILE_SERVICE_ADDRESS = "http://192.168.1.15:5000"
|
||||||
GET_MP3 = "/mp3"
|
GET_MP3 = "/mp3"
|
||||||
SEND_MP3 = "/update_mp3"
|
SEND_MP3 = "/update_mp3"
|
||||||
|
LIBRARIAN_SERVICE_ADDRESS = "http://192.168.1.15:5001"
|
||||||
|
SEND_QUERY = "/query"
|
||||||
TIME_BETWEEN_CALLS = 7200
|
TIME_BETWEEN_CALLS = 7200
|
||||||
LAST_SPONTANEOUS_CALL = datetime.now()
|
LAST_SPONTANEOUS_CALL = datetime.now()
|
||||||
|
|
||||||
@@ -1977,6 +1980,17 @@ class DoSearchView(discord.ui.View):
|
|||||||
guild=discord.Object(id=664789470779932693),
|
guild=discord.Object(id=664789470779932693),
|
||||||
)
|
)
|
||||||
async def wyszukaj_linki_do_dokumentow(ctx):
|
async def wyszukaj_linki_do_dokumentow(ctx):
|
||||||
|
#1 wez tekst z kontekstu
|
||||||
|
query = ctx.message.content()
|
||||||
|
#2 nadaj mu uuid
|
||||||
|
query_uuid = uuid.uuid4()
|
||||||
|
#3 wyslij Librariana
|
||||||
|
json_query = {"UUID" : str(query_uuid), "query" : str(query)}
|
||||||
|
response = requests.post(f"{LIBRARIAN_SERVICE_ADDRESS}{SEND_QUERY}", json=json_query, timeout=360)
|
||||||
|
logger.info(response.data)
|
||||||
|
#4 zwroc 5 wyników od librariana
|
||||||
|
#5 przyciski przy każdym wierszu pozwalają sprawdzić czy plik istnieje na scihubie - jeśli tak podaje link do sciagniecia
|
||||||
|
#6 ostatni wiersz to dalej, wróć, skasuj, zaciagnij kolejne wyniki (jeśli jest ich więcej niż 1000)
|
||||||
await ctx.send("This is a button!", view=DoSearchView()) # Send a message with our View class that contains the button
|
await ctx.send("This is a button!", view=DoSearchView()) # Send a message with our View class that contains the button
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
import re
|
import re
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
from flask import Flask, jsonify, request
|
||||||
import netrc
|
import netrc
|
||||||
import json
|
import json
|
||||||
from platform import uname
|
from platform import uname
|
||||||
from sys import platform
|
from sys import platform
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
from habanero import Crossref
|
from habanero import Crossref
|
||||||
|
from waitress import serve
|
||||||
|
|
||||||
if platform in ("linux", "linux2"):
|
if platform in ("linux", "linux2"):
|
||||||
SEPARATOR_FILE_PATH = "/"
|
SEPARATOR_FILE_PATH = "/"
|
||||||
@@ -15,6 +19,8 @@ if platform in ("linux", "linux2"):
|
|||||||
elif platform == "win32":
|
elif platform == "win32":
|
||||||
NETRC_FILE = "C:\\Users\\mtusz\\.netrc"
|
NETRC_FILE = "C:\\Users\\mtusz\\.netrc"
|
||||||
|
|
||||||
|
HOST_ADDRESS = "192.168.1.15"
|
||||||
|
PORT_ADDRESS = 5001
|
||||||
|
|
||||||
class Librarian(object):
|
class Librarian(object):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -26,8 +32,6 @@ class Librarian(object):
|
|||||||
|
|
||||||
def search_crossref(self, query):
|
def search_crossref(self, query):
|
||||||
self.last_search = self.cr.works(query = query, limit = self.limit)
|
self.last_search = self.cr.works(query = query, limit = self.limit)
|
||||||
|
|
||||||
|
|
||||||
for item in self.last_search['message']['items']:
|
for item in self.last_search['message']['items']:
|
||||||
print("=====")
|
print("=====")
|
||||||
#print (item)
|
#print (item)
|
||||||
@@ -39,12 +43,12 @@ class Librarian(object):
|
|||||||
print("This a part of larger release")
|
print("This a part of larger release")
|
||||||
print(item['container-title'])
|
print(item['container-title'])
|
||||||
print (self.last_search['message']['total-results'])
|
print (self.last_search['message']['total-results'])
|
||||||
|
#add to sql with UUID
|
||||||
|
#sql row - title, doi, author, uuid, last retrieved, is_available
|
||||||
with open("results.json", "x", encoding="UTF-8") as new_file:
|
with open("results.json", "x", encoding="UTF-8") as new_file:
|
||||||
new_file.seek(0)
|
new_file.seek(0)
|
||||||
json.dump(self.last_search['message']['items'], new_file, indent=4)
|
json.dump(self.last_search['message']['items'], new_file, indent=4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def check_if_exists(self,page_url):
|
def check_if_exists(self,page_url):
|
||||||
in_scihub_db = True
|
in_scihub_db = True
|
||||||
if not page_url.startswith(("http:", "https:")):
|
if not page_url.startswith(("http:", "https:")):
|
||||||
@@ -73,17 +77,79 @@ class Librarian(object):
|
|||||||
if self.check_if_exists(page_url):
|
if self.check_if_exists(page_url):
|
||||||
return page_url
|
return page_url
|
||||||
return None
|
return None
|
||||||
|
def answer_query(self, uuid, query):
|
||||||
|
#Search sql for UUID
|
||||||
|
#SQL SELECT * FROM RESULTS WHERE UUID = uuid
|
||||||
|
uuid_found = True
|
||||||
|
if uuid_found:
|
||||||
|
return self.last_search
|
||||||
|
|
||||||
cl = Librarian()
|
self.search_crossref(query)
|
||||||
|
|
||||||
#example not exists
|
#example not exists
|
||||||
#sample_non_existing_page_url = "https://sci-hub.se/10.4324/9781003006237"
|
#sample_non_existing_page_url = "https://sci-hub.se/10.4324/9781003006237"
|
||||||
#sample usage to download
|
#sample usage to download
|
||||||
#sample_existing_page_url = "https://sci-hub.se/10.1057/9781137435026"
|
#sample_existing_page_url = "https://sci-hub.se/10.1057/9781137435026"
|
||||||
#print(cl.download(sample_existing_page_url))
|
#print(cl.download(sample_existing_page_url))
|
||||||
cl.search_crossref("BDSM")
|
#cl.search_crossref("BDSM")
|
||||||
|
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
def flask_debug():
|
||||||
|
"""
|
||||||
|
The `flask_debug` function starts a Flask application in debug mode without using the reloader.
|
||||||
|
Do not use for production for fucks sake.
|
||||||
|
"""
|
||||||
|
# trunk-ignore(bandit/B201)
|
||||||
|
app.run(debug=True, use_reloader=False, host=HOST_ADDRESS, port=PORT_ADDRESS)
|
||||||
|
|
||||||
|
def waitress_run():
|
||||||
|
"""
|
||||||
|
The `waitress_run` function serves the `app` on host "0.0.0.0"
|
||||||
|
and port 5000 using the Waitress WSGI server.
|
||||||
|
"""
|
||||||
|
serve(app, host=HOST_ADDRESS, port=PORT_ADDRESS)
|
||||||
|
|
||||||
|
@app.route("/query", methods=["POST"])
|
||||||
|
def update_music_list():
|
||||||
|
"""
|
||||||
|
The function `update_music_list` receives a POST request with a JSON payload, logs the received
|
||||||
|
item, adds it to a music file list, and returns a success message along with the updated record.
|
||||||
|
:return: The function `update_music_list` is returning a tuple containing a JSON response and a
|
||||||
|
status code. The JSON response includes keys `isError`, `message`, `statusCode`, and `data`,
|
||||||
|
with values indicating the success of the operation and the data that was
|
||||||
|
received and added to the `music_file_list`.
|
||||||
|
The status code returned is 200, indicating a successful response.
|
||||||
|
"""
|
||||||
|
record = json.loads(request.data)
|
||||||
|
app.logger.info(record)
|
||||||
|
app.logger.info(record["query"])
|
||||||
|
app.logger.info(record["UUID"])
|
||||||
|
|
||||||
|
cl = Librarian()
|
||||||
|
with open("results.json", "r", encoding="UTF-8") as new_file:
|
||||||
|
#tu logika komunikacji z SQL i cała logika związana z wyszukaniem
|
||||||
|
cl.last_search = json.load(new_file)
|
||||||
|
|
||||||
|
answer_data = cl.last_search
|
||||||
|
return_data = (
|
||||||
|
jsonify(isError=False, message="Success", statusCode=200, data=answer_data),
|
||||||
|
200,
|
||||||
|
)
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logger = logging.getLogger('conjurer_musician')
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
threads = []
|
||||||
|
#threads.append(threading.Thread(target=waitress_run))
|
||||||
|
threads.append(threading.Thread(target=flask_debug))
|
||||||
|
|
||||||
|
for worker in threads:
|
||||||
|
worker.start()
|
||||||
|
|
||||||
|
for worker in threads:
|
||||||
|
worker.join()
|
||||||
|
|
||||||
#1. robi liste wyników i ją wyświetla - ale tylko tytuły niezależnych dzieł - jeśli jest coś w containerze to trza pogrupować
|
#1. robi liste wyników i ją wyświetla - ale tylko tytuły niezależnych dzieł - jeśli jest coś w containerze to trza pogrupować
|
||||||
#2. Tworzy przyciski pozwalające sprawdzić czy jest dostępne - i jeśli jest zwraca link
|
#2. Tworzy przyciski pozwalające sprawdzić czy jest dostępne - i jeśli jest zwraca link
|
||||||
#3. Jest też przycisk "more" - wyszukujemy po 100, wyświetlamy po 20. Po 100 jak jeszcze to dopiero odpytujemy crossref przyciski strzałek przesuwają po obecnej porcji danych
|
#3. Jest też przycisk "more" - wyszukujemy po 100, wyświetlamy po 20. Po 100 jak jeszcze to dopiero odpytujemy crossref przyciski strzałek przesuwają po obecnej porcji danych
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
habanero
|
habanero
|
||||||
|
waitress
|
||||||
|
flask
|
||||||
Reference in New Issue
Block a user