0

I have a Python script that prompts for text input, searches an online Korean dictionary, and then downloads MP3 audio files for the words found. I use the script to help me make Anki flashcards with audio. The script is originally from this post on reddit.

I can execute the script from the terminal while in the directory that the script is stored in. However, when I am in a different directory and execute the script by calling its full path, the script appears to run but does not find any words or download any MP3s. I cannot figure out why the script fails to execute correctly when I call it from a different directory.

The script is stored in the downloads folder on my Mac /Users/matt/Downloads So, when I run the following commands, it works:

cd Downloads
python3 naver.py

However, when I run the following, the script executes, but doesn't download any MP3s:

python3 /Users/matt/Downloads/naver.py

The full Python script is here:

import urllib.request, json, codecs, math, time
 
def searchWords(koreanWords):
    url = ('https://ko.dict.naver.com/api3/koko/search?' + urllib.parse.urlencode({'query': koreanWords}) + '&range=word&page=1')
    response = urllib.request.urlopen(url)
    reader = codecs.getreader("utf-8")
    jsonInfo = json.load(reader(response))
    pageCount = jsonInfo["pagerInfo"]["totalPages"]
    searchData = jsonInfo["searchResultMap"]["searchResultListMap"]["WORD"]["items"]
 
    for pageCountInc in range(0, pageCount):
        if pageCountInc != 0:
            url = ('https://ko.dict.naver.com/api3/koko/search?' + urllib.parse.urlencode({'query': koreanWords}) + '&range=word&page=' + str(pageCountInc+1))
        response = urllib.request.urlopen(url)
        reader = codecs.getreader("utf-8")
        jsonInfo = json.load(reader(response))
        searchData = jsonInfo["searchResultMap"]["searchResultListMap"]["WORD"]["items"]
        for z in range (0, len(searchData)):
            if searchData[z]["handleEntry"] in unchangedWordList:
                if searchData[z]["searchPhoneticSymbolList"]:
                    if searchData[z]["searchPhoneticSymbolList"][0]["phoneticSymbolPath"] != "":
                        timesDownloaded[unchangedWordList.index(searchData[z]["handleEntry"])] += 1
                        mp3Link = searchData[z]["searchPhoneticSymbolList"][0]["phoneticSymbolPath"]
                        if mp3Link not in mp3Links:
                            mp3Links.append(mp3Link)
                            urllib.request.urlretrieve(mp3Link, searchData[z]["handleEntry"] + str(timesDownloaded[unchangedWordList.index(searchData[z]["handleEntry"])]) + ".mp3")
                            time.sleep(.3)
   
def parseWords(listOfWords):
    for x in range(0, math.floor(len(listOfWords)/10)):
        tempWords = []
        for y in range(0, 10):
            tempWords.append(listOfWords[x*10+y])
 
        print("Searching: " + str(x+1) + "/" + str(math.ceil(len(listOfWords)/10)))
        searchWords(tempWords)
 
    tempWords = []
    for y in range(math.floor(len(listOfWords)/10)*10+1, len(listOfWords)):
        tempWords.append(listOfWords[y])
    print("Searching: " + str((math.ceil(len(listOfWords)/10))) + "/" + str(math.ceil(len(listOfWords)/10)))
    searchWords(tempWords)
unfoundWords = []
unchangedWordList = []
timesDownloaded = []
mp3Links = []
wordInputs = unchangedWordList = input('Enter Words: ').split()
timesDownloaded = [0] * len(unchangedWordList)
 
parseWords(wordInputs)
 
for z in range(0, len(timesDownloaded)):
    if(timesDownloaded[z] == 0):
        unfoundWords.append(unchangedWordList[z])
 
if unfoundWords:
    print(",".join(str(x) for x in unfoundWords) + " could not be found.")
    print("Rerunning individual searches for unfound words.")
    print(unfoundWords)
    oldUnfoundWords = unfoundWords
    unfoundWords = []
    for x in range(0, len(oldUnfoundWords)):
        print("Searching: " + str(x+1) + "/" + str(len(oldUnfoundWords)))
        searchWords(oldUnfoundWords[x])
 
    for z in range(0, len(timesDownloaded)):
        if(timesDownloaded[z] == 0):
            unfoundWords.append(unchangedWordList[z])
 
    if unfoundWords:
        print(",".join(str(x) for x in unfoundWords) + " could not be found.")

2 Answers 2

1

To answer question of how to save to a specific folder use pathlib to construct the path to MP3 folder.

import os
from pathlib import Path
# Create parent folder
mp3DIR = os.path.join(Path.home(),'Music')
basename = searchData[z]["handleEntry"] 
           + str(timesDownloaded[unchangedWordList.index(searchData[z]["handleEntry"])]) + ".mp3"
urllib.request.urlretrieve(mp3Link, os.path.join(mp3Dir, basename))
Sign up to request clarification or add additional context in comments.

Comments

0

The reason is the following: Your python file runs in your current directory. So, when you run this: python3 /Users/matt/Downloads/naver.py, it either runs and saves the mp3 files in the current directory, or it doesn't save anything at all if it doesn't have the permissions to.

1 Comment

How would I go about setting the MP3 files to save to specific directory rather than the current directory?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.