Neo4j
How to connect UltiHash to Neo4j
FlaskAPI
from neo4j import GraphDatabase
from flask import Flask, request, jsonify
from io import BytesIO
from PIL import Image
import boto3
NEO4J_URI = "neo4j+s://your-link.neo4j.io"
NEO4J_USER = "user"
NEO4J_PASSWORD = "your_password_here"
driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD))
ULTIHASH_ENDPOINT = "endpoint_url"
ULTIHASH_BUCKET = "movies" #my bucket name
ULTIHASH_ACCESS_KEY = "YOUR-ACCESS KEY"
ULTIHASH_SECRET_KEY = "YOUR-SECRET-KEY"
s3 = boto3.client(
"s3",
endpoint_url=ULTIHASH_ENDPOINT,
aws_access_key_id=ULTIHASH_ACCESS_KEY,
aws_secret_access_key=ULTIHASH_SECRET_KEY
)
app = Flask(__name__)
@app.route("/query", methods=["POST"])
def query():
data = request.get_json()
cypher_query = data.get("query")
if not cypher_query:
return jsonify({"error": "Missing query parameter"}), 400
with driver.session() as session:
results = session.run(cypher_query)
records = [record.data() for record in results]
if not records:
return jsonify({"error": "No results found"}), 404
output = []
poster_filenames = [record["poster_filename"] for record in records if "poster_filename" in record]
if poster_filenames:
fetch_and_open_images(poster_filenames)
return jsonify({"results": records})
def fetch_and_open_images(filenames):
for filename in filenames:
if not filename.lower().endswith(('.jpg', '.jpeg')): #my objects have file extensions
filename += ".jpg"
try:
response = s3.get_object(Bucket=ULTIHASH_BUCKET, Key=filename)
file_data = response["Body"].read()
image = Image.open(BytesIO(file_data))
image.show()
except Exception as e:
print(f"Error fetching/opening {filename}: {e}")
if __name__ == "__main__":
app.run(debug=True)
API Query
Last updated
Was this helpful?