poc anki status pull
This commit is contained in:
parent
77186519cd
commit
bf2e7055db
103
anki-connect.py
Normal file
103
anki-connect.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
import json
|
||||
import requests
|
||||
|
||||
ANKI_URL = "http://127.0.0.1:8765"
|
||||
|
||||
def request_anki(action, params=None):
|
||||
"""Sends a payload to AnkiConnect."""
|
||||
payload = {"action": action, "version": 6, "params": params or {}}
|
||||
response = requests.post(ANKI_URL, json=payload)
|
||||
response.raise_for_status()
|
||||
return response.json().get("result")
|
||||
|
||||
def get_card_proficiency(query="deck:current"):
|
||||
"""
|
||||
Finds cards by query, retrieves scheduling data,
|
||||
and prints proficiency stats for each card.
|
||||
"""
|
||||
card_ids = request_anki("findCards", {"query": query})
|
||||
if not card_ids:
|
||||
print("No cards found.")
|
||||
return
|
||||
|
||||
card_info = request_anki("cardsInfo", {"cards": card_ids})
|
||||
|
||||
card_proficiency = {}
|
||||
|
||||
for card in card_info:
|
||||
card_id = card["cardId"]
|
||||
# In Anki: 0=new, 1=learning, 2=review, 3=relearning
|
||||
queue_state = card["queue"]
|
||||
interval = card["interval"]
|
||||
reps = card["reps"]
|
||||
lapses = card["lapses"]
|
||||
|
||||
# Anki queue mappings:
|
||||
# 0 = New, 1 = Learning, 2 = Review, 3 = Relearning
|
||||
if queue_state == 0:
|
||||
status = "New"
|
||||
color = ''
|
||||
elif queue_state == 1:
|
||||
status = "Learning"
|
||||
color = 'orangered'
|
||||
elif queue_state == 3:
|
||||
status = "Relearning"
|
||||
color = 'yellow'
|
||||
elif queue_state == 2:
|
||||
# Review card split by 21-day threshold
|
||||
if interval >= 21:
|
||||
status = "Mature"
|
||||
color = 'cyan'
|
||||
else:
|
||||
status = "Young"
|
||||
color = 'lime'
|
||||
elif queue_state < 0:
|
||||
status = "Suspended"
|
||||
color = ''
|
||||
else:
|
||||
status = f"Unknown (Queue {queue})"
|
||||
color = ''
|
||||
|
||||
word = ''
|
||||
if (card['fields'].get('Word')):
|
||||
print(card['fields']['Word'])
|
||||
word = card['fields']['Word']['value']
|
||||
else:
|
||||
#print(card['fields'])
|
||||
continue
|
||||
|
||||
if (card_proficiency.get(word)):
|
||||
print("Multiple matches for word")
|
||||
else:
|
||||
card_proficiency[word] = {'Status' : status,'State' : status, 'Color' : color}
|
||||
|
||||
print(f"Card ID {card_id} (State: {queue_state}):")
|
||||
print(f" Reps: {reps} | Lapses: {lapses} | Interval: {interval} days | Ease: {status} \n")
|
||||
|
||||
return card_proficiency
|
||||
|
||||
# Example usage: Evaluate proficiency for all cards in a specific deck
|
||||
# get_card_proficiency(query='deck:"Your Deck Name Here"')
|
||||
proficiency_stats = get_card_proficiency(query='deck:"Japanese Vocab" card:0')
|
||||
if proficiency_stats.get('休み'):
|
||||
proficiency_stats['休み']['Status']
|
||||
|
||||
#Anki determines a card's maturity, learning, or relearning state based on its queue type and interval value.
|
||||
# Mature: Review card with an interval of 21 days or more.
|
||||
# Young: Review card with an interval of less than 21 days.
|
||||
# Relearning: Card currently failing review, placed back into a learning queue.
|
||||
"""
|
||||
# Anki queue mappings:
|
||||
# 0 = New, 1 = Learning, 2 = Review, 3 = Relearning
|
||||
if queue == 0:
|
||||
status = "New"
|
||||
elif queue == 1:
|
||||
status = "Learning"
|
||||
elif queue == 3:
|
||||
status = "Relearning"
|
||||
elif queue == 2:
|
||||
# Review card split by 21-day threshold
|
||||
status = "Mature (Review)" if ivl >= 21 else "Young (Review)"
|
||||
else:
|
||||
status = f"Unknown (Queue {queue})"
|
||||
"""
|
||||
Loading…
Reference in New Issue
Block a user