jkmm84,
If you have audio in a URL that you want analysis for, you do not need to do song.search or song.identify. Make a Pyechonest Track object from the URL using:
from pyechonest import track
t = track.track_from_url(url)
t.get_analysis()
Now your Track object has the full audio analysis, and you can get all the segments along with timbral information by iterating over t.segments. Uploading a track in this way will also do an implicit song/identify and fill in the SO ID.
The reason you are getting a Codegen error on the second example is that song.identify expects an ENMFP codestring (fingerprint). If you pass a URL or filename, it expects you to have the Codegen binary available to create the fingerprint. If this doesn't make sense to you, just ignore song.identify and stick with track_from_url() or track_from_filename().
~David~