Avnsx / fansly-downloader

Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content offline anytime, anywhere in the highest possible content resolution! Fully customizable to download in bulk or single: photos, videos & audio from timeline, messages, collection & specific posts 👍
https://fansly.com/
GNU General Public License v3.0
1.27k stars 64 forks source link

Issue on macos #78

Closed samja666 closed 1 year ago

samja666 commented 1 year ago

On macos, i am getting an issue.

  File "fansly_scraper.py", line 48
    output(2,'\n [2]ERROR','<red>', f'"{e}" is missing or malformed in the configuration file!\n{21*" "}Read the Wiki > Explanation of provided programs & their functionality > config.ini')
                                                                                                                                                                                           ^
SyntaxError: invalid syntax

I have not modified any of your code except editing the required fields in config.ini

samja666 commented 1 year ago

I saw there was an exact same issue, but it had been marked as invalid and closed. https://github.com/Avnsx/fansly/issues/55

Avnsx commented 1 year ago

Slightly change the auth token in your config.ini file and paste the whole config.ini file here

samja666 commented 1 year ago

Slightly change the auth token in your config.ini file and paste the whole config.ini file here

Here you go. I have changed the token

[TargetedCreator]
username = CreatorName

[MyAccount]
authorization_token = NTExMzEyMDI0MzU4MTAwOTkyOjE6Mjo5NzY123Q3NTcxZjg2MmY3ZGM1OTNiMTZmNmQzZDU
user_agent = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36

[Options]
show_downloads = False
download_media_previews = True
update_recent_download = Auto
open_folder_when_finished = True
naming_convention = Date_posted
seperate_messages = False
seperate_previews = False
download_directory = Local_directory

[Other]
version = 0.3.6
Avnsx commented 1 year ago

SyntaxError: invalid syntax

So considering this is a SyntaxError, it must be an issue with your environment not supporting the way the output function is structured. Specifically the f-strings (formatted string literals).

So the python code snippet I linked right below, contains two versions of the line of code that caused this error for you. Please create a new python script, paste below snippet into it and run it, then let me know the result and the version of python that you're using to produce it.

import sys
from loguru import logger as log
from functools import partialmethod

def output(level, type, color, mytext):
    try:log.level(type, no=level, color=color)
    except TypeError:pass # level failsave
    log.__class__.type = partialmethod(log.__class__.log, type)
    log.remove()
    log.add(sys.stdout, format="<level>{level}</level> | <white>{time:HH:mm}</white> <level>|</level><light-white>| {message}</light-white>", level=type)
    log.type(mytext)

e = 'test'

# does this NOT cause a syntax error? (no additonal " around the f-string)
output(2,'\n [2]ERROR','<red>', f'{e} is missing or malformed in the configuration file!\n{21*" "}Read the Wiki > Explanation of provided programs & their functionality > config.ini')

# does this cause the syntax error? (added additional ")
output(2,'\n [2]ERROR','<red>', f'"{e}" is missing or malformed in the configuration file!\n{21*" "}Read the Wiki > Explanation of provided programs & their functionality > config.ini')

I saw there was an exact same issue, but it had been marked as invalid and closed. #55

The error you're having is not the exact same one as the guys. The guy in there modified the output function, but because of lacking programming skills he didn't understand that the function takes 4 arguments output(level, type, color, mytext) but he only passed 3 arguments, leaving out type.

But now that you pointed it out I wonder, if he maybe didn't modify the code himself, but his environment wasn't able to execute the function argument type as such, since type is also a built-in python function, maybe I should choose a different variable name that is not going to conflict with built-in names, as that might lead to unexpected errors.

So to test that also, try running this snippet below:

import sys
from loguru import logger as log
from functools import partialmethod

# renamed func argument from "type" to "log_type"
def output(level, log_type, color, mytext):
    try:log.level(log_type, no=level, color=color)
    except TypeError:pass # level failsave
    log.__class__.type = partialmethod(log.__class__.log, log_type)
    log.remove()
    log.add(sys.stdout, format="<level>{level}</level> | <white>{time:HH:mm}</white> <level>|</level><light-white>| {message}</light-white>", level=log_type)
    log.type(mytext)

e = 'test'

# does this NOT cause a syntax error? (removed newline backslash in type arg)
output(2,'[2]ERROR','<red>', f'{e} is missing or malformed in the configuration file!\n{21*" "}Read the Wiki > Explanation of provided programs & their functionality > config.ini')

# does this cause the syntax error? (keeping newline backslash in type arg)
output(2,'\n [2]ERROR','<red>', f'"{e}" is missing or malformed in the configuration file!\n{21*" "}Read the Wiki > Explanation of provided programs & their functionality > config.ini')

I myself for example can execute all of these without any errors, it might be different for you though, which is why I want you to test both of these snippets and report back to me :)

Avnsx commented 1 year ago

@samja666 Hey could you report back please? I want to include a fix for this in the next compiled version already

Avnsx commented 1 year ago

Regardless of you not responding anymore, I am pretty sure this issue was related to not escaping apostrophes in prints.

Should be fixed with https://github.com/Avnsx/Fansly-Downloader-App/commit/8c591cb2d1d1ee35a1243f788d1cb83c99e65209

Will release that 0.4 version as compiled executable within a couple days, once people start providing some feedback.