johnwmillr / LyricsGenius

Download song lyrics and metadata from Genius.com 🎢🎀
http://www.johnwmillr.com/scraping-genius-lyrics/
MIT License
899 stars 159 forks source link

Error message #77

Closed Chris31070 closed 5 years ago

Chris31070 commented 5 years ago

Hi, I get an error message while using your code:

_import lyricsgenius as genius api = genius.Genius('----my api code ---') artist = api.search_artist('Andy Shauf', maxsongs=3)

Error message:

Traceback (most recent call last): _File "C:/Users/Chris/AppData/Local/Programs/Python/Python37-32/top2000/181208 top2000.py", line 3, in artist = api.search_artist('Andy Shauf', max_songs=3) File "C:\Users\Chris\AppData\Local\Programs\Python\Python37-32\lib\site-packages\lyricsgenius\api.py", line 283, in search_artist found_name = artistinfo['artist']['name'] TypeError: 'NoneType' object is not subscriptable

Can you help me with this? Many thanks!

Chris31070 commented 5 years ago

I copied the wrong api code, it all works fine!

johnwmillr commented 5 years ago

Great! Let me know if you run into any other issues.

Chris31070 commented 5 years ago

Well John, I have one question for you might help me. I have now a long list of artist-song pairs (the 'top 2000') which I would like to use as search query. Do you have any idea how I can best implement this? My goal is to get the 2000 song texts out.

It's rather new for me, so any guidance is helpful.

Many thanks and all the best,

Chris

Op 10 december 2018 om 1:02 schreef John notifications@github.com:

Great! Let me know if you run into any other issues.

β€”
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub https://github.com/johnwmillr/LyricsGenius/issues/77#issuecomment-445587500 , or mute the thread https://github.com/notifications/unsubscribe-auth/ArmmgxVxim3Bv9UKWJpMErndJurmXQSbks5u3aSYgaJpZM4ZJ06R .
johnwmillr commented 5 years ago

Hi Chris,

If I understand you correctly, something like this might work for you:

# songPairs is a list of song title and artist name pairs
# (e.g. [["I Will", "The Beatles"], ["Begin Again", "Andy Shauf"]])
for pair in songPairs:
  song = api.search_song(pair[0], pair[1])
  if song:
    savename = "Lyrics_{A}_{T}".format(song.title, song.artist)
    song.save_lyrics(savename, forma_="txt")

Does that seem like what you want? Let me know if it works for you. John

Chris31070 commented 5 years ago

Many thanks Jonn, let me check this out! So far I used the standard 10 hits result and took the first URL.

mrpandastic commented 5 years ago

Hi Jonn,

I'm quite new to Python and trying to retrieve lyrics from genius.com with your package. Unfortunately, I still keep on receiving the error:

TypeError: 'NoneType' object is not subscriptable

I used the same code as Chris31070 previously posted but it's not working. Can you help me out? Thanks a lot!

johnwmillr commented 5 years ago

Hi @mrpandastic, what version of the package are you using? If it's not the latest version (1.6.0), try updating with pip:

pip install -U lyricsgenius
mrpandastic commented 5 years ago

Hi @mrpandastic, what version of the package are you using? If it's not the latest version (1.6.0), try updating with pip:

pip install -U lyricsgenius

yes, 1.6.0 is installed

johnwmillr commented 5 years ago

I don't get the same error when executing the code. What happens if you try in Python:

genius.get_artist(29472)

Do you get a lot of data back? Did you properly set up your API key?

mrpandastic commented 5 years ago

This is what's in my Jupyter Notebook:

import lyricsgenius

genius = lyricsgenius.Genius("--mykey--")
artist = genius.search_artist("Eminem", max_songs=3, sort="title")`

and this is the error I get:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-08dc5616b4a3> in <module>
      2 
      3 genius = lyricsgenius.Genius("--mykey--") 
----> 4 artist = genius.search_artist("Eminem", max_songs=3, sort="title")

~\AppData\Roaming\Python\Python37\site-packages\lyricsgenius\api.py in search_artist(self, artist_name, max_songs, sort, per_page, get_full_info, allow_name_change, artist_id)
    294 
    295         artist_info = self.get_artist(artist_id)
--> 296         found_name = artist_info['artist']['name']
    297         if found_name != artist_name and allow_name_change:
    298             if self.verbose:

TypeError: 'NoneType' object is not subscriptable
johnwmillr commented 5 years ago

What happens when you try this?

import lyricsgenius
genius = lyricsgenius.Genius("--mykey--")
genius.get_artist(29472)

Do you get any data in response?

mrpandastic commented 5 years ago

What happens when you try this?

import lyricsgenius
genius = lyricsgenius.Genius("--mykey--")
genius.get_artist(29472)

Do you get any data in response?

No data but also no TypeError. It just says None.

import lyricsgenius genius = lyricsgenius.Genius("--mykey--") artist = genius.get_artist(29472) print(artist)

mrpandastic commented 5 years ago

What happens when you try this?

import lyricsgenius
genius = lyricsgenius.Genius("--mykey--")
genius.get_artist(29472)

Do you get any data in response?

No data but also no TypeError. It just says None.

import lyricsgenius genius = lyricsgenius.Genius("--mykey--") artist = genius.get_artist(29472) print(artist)

Oh it works now. Looks like I'm an idiot who mixed up the client secret and client access token. omg Anyway, sorry for bothering you with my questions and thank you so much for your help. Really appreciate it!

johnwmillr commented 5 years ago

Ah, yes, that is a bug. You can open a new issue to log this problem.

John

On Fri, Aug 9, 2019 at 11:43 AM mrpandastic notifications@github.com wrote:

Hi Chris,

If I understand you correctly, something like this might work for you:

songPairs is a list of song title and artist name pairs# (e.g. [["I Will", "The Beatles"], ["Begin Again", "Andy Shauf"]])for pair in songPairs:

song = api.searchsong(pair[0], pair[1]) if song: savename = "Lyrics{A}_{T}".format(song.title, song.artist) song.savelyrics(savename, forma="txt")

Does that seem like what you want? Let me know if it works for you. John

Hi John,

thanks again for your great help! I have another question: I tried your code from above regarding song-artist pairs and it doesn't seem to return the correct result:

`import lyricsgenius

genius = lyricsgenius.Genius("--mykey--")

SongPairs = [['Rocketman', 'Elton John'],['Till I collapse','Eminem'],['Californication','Red Hot Chili Peppers']]

for pair in SongPairs: song = genius.search_song(pair[0], pair[1]) lyrics = song.lyrics print(lyrics)`

2nd and 3rd pair returns the correct lyrics but I don't understand why the first pair is getting "The One - Prodigy & The Alchemist"?

P.S. maybe I'm just not familiar with Elton John being a Rapper? haha :D

β€” You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/johnwmillr/LyricsGenius/issues/77?email_source=notifications&email_token=ABFR3CPHAPNYZY3ZJK36QATQDW3G3A5CNFSM4GJHJ2I2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD37PAWY#issuecomment-520024155, or mute the thread https://github.com/notifications/unsubscribe-auth/ABFR3CINGSREJZ2V6ZRV453QDW3G3ANCNFSM4GJHJ2IQ .