예제 #1
0
    def __init__(self, mid=0, page=None, fromImage=False):
        if page is not None:
            self.artistId = mid
            payload = parseJs(page)

            # check error
            if payload is None:
                if self.is_not_logged_in(page):
                    raise PixivException('Not Logged In!', errorCode=PixivException.NOT_LOGGED_IN, htmlPage=page)
                if self.IsUserNotExist(page):
                    raise PixivException('User ID not exist/deleted!', errorCode=PixivException.USER_ID_NOT_EXISTS, htmlPage=page)
                if self.IsUserSuspended(page):
                    raise PixivException('User Account is Suspended!', errorCode=PixivException.USER_ID_SUSPENDED, htmlPage=page)
                # detect if there is any other error
                errorMessage = self.IsErrorExist(page)
                if errorMessage is not None:
                    raise PixivException('Member Error: ' + errorMessage, errorCode=PixivException.OTHER_MEMBER_ERROR, htmlPage=page)
                # detect if there is server error
                errorMessage = self.IsServerErrorExist(page)
                if errorMessage is not None:
                    raise PixivException('Member Error: ' + errorMessage, errorCode=PixivException.SERVER_ERROR, htmlPage=page)

            # detect if image count != 0
            if not fromImage:
                # self.ParseImages(payload)
                raise NotImplementedError
            else:
                self.isLastPage = True
                self.haveImages = True

            # parse artist info
            self.ParseInfo(payload, fromImage)
예제 #2
0
    def __init__(self,
                 mid=0,
                 page=None,
                 fromImage=False,
                 offset=None,
                 limit=None):
        self.offset = offset
        self.limit = limit

        if page is not None:
            self.artistId = mid
            payload = parseJs(page)

            # detect if image count != 0
            if not fromImage:
                payload = demjson.decode(page)
                if payload["error"]:
                    raise PixivException(
                        payload["message"],
                        errorCode=PixivException.OTHER_MEMBER_ERROR,
                        htmlPage=page)
                if payload["body"] is None:
                    raise PixivException(
                        "Missing body content, possible artist id doesn't exists.",
                        errorCode=PixivException.USER_ID_NOT_EXISTS,
                        htmlPage=page)
                self.ParseImages(payload["body"])
            else:
                self.isLastPage = True
                self.haveImages = True

            # parse artist info
            self.ParseInfo(payload, fromImage)
예제 #3
0
    def __init__(self, mid=0, page=None, fromImage=False):
        if page is not None:
            self.artistId = mid
            payload = json.loads(page)
            # check error
            if payload["error"] == True:
                raise PixivException('Artist Error: ' + str(payload["error"]),
                                     errorCode=PixivException.SERVER_ERROR)

            # detect if image count != 0
            if not fromImage:
                self.ParseImages(payload)

            # parse artist info
            self.ParseInfo(payload, fromImage)
예제 #4
0
    def __init__(self, iid=0, page=None, parent=None, fromBookmark=False,
                 bookmark_count=-1, image_response_count=-1, dateFormat=None):
        self.artist = parent
        self.fromBookmark = fromBookmark
        self.bookmark_count = bookmark_count
        self.imageId = iid
        self.imageUrls = []
        self.dateFormat = dateFormat
        self.descriptionUrlList = []

        if page is not None:
            payload = parseJs(page)

            # check error
            if payload is None:
                if self.IsNotLoggedIn(page):
                    raise PixivException('Not Logged In!', errorCode=PixivException.NOT_LOGGED_IN, htmlPage=page)
                if self.IsNeedPermission(page):
                    raise PixivException('Not in MyPick List, Need Permission!', errorCode=PixivException.NOT_IN_MYPICK, htmlPage=page)
                if self.IsNeedAppropriateLevel(page):
                    raise PixivException('Public works can not be viewed by the appropriate level!',
                                         errorCode=PixivException.NO_APPROPRIATE_LEVEL, htmlPage=page)
                if self.IsDeleted(page):
                    raise PixivException('Image not found/already deleted!', errorCode=PixivException.IMAGE_DELETED, htmlPage=page)
                if self.IsGuroDisabled(page):
                    raise PixivException('Image is disabled for under 18, check your setting page (R-18/R-18G)!',
                                         errorCode=PixivException.R_18_DISABLED, htmlPage=page)
                # detect if there is any other error
                errorMessage = self.IsErrorExist(page)
                if errorMessage is not None:
                    raise PixivException('Image Error: ' + str(errorMessage), errorCode=PixivException.UNKNOWN_IMAGE_ERROR, htmlPage=page)
                # detect if there is server error
                errorMessage = self.IsServerErrorExist(page)
                if errorMessage is not None:
                    raise PixivException('Image Error: ' + str(errorMessage), errorCode=PixivException.SERVER_ERROR, htmlPage=page)

            # parse artist information
            if parent is None:
                temp_artist_id = list(payload["preload"]["user"].keys())[0]
                self.artist = PixivArtist(temp_artist_id, page, fromImage=True)

            if fromBookmark and self.originalArtist is None:
                assert(self.artist is not None)
                self.originalArtist = PixivArtist(page=page, fromImage=True)
                print("From Artist Bookmark: {0}".format(self.artist.artistId))
                print("Original Artist: {0}".format(self.originalArtist.artistId))
            else:
                self.originalArtist = self.artist

            # parse image
            self.ParseInfo(payload)
예제 #5
0
    def parseTags(self, page, query=""):
        payload = json.loads(page)
        self.query = query

        # check error
        if payload["error"]:
            raise PixivException('Image Error: ' + payload["message"],
                                 errorCode=PixivException.SERVER_ERROR)

        # parse image information
        parsed = BeautifulSoup(payload["body"]["html"])
        self.itemList = list()
        images = parsed.findAll("div",
                                attrs={"class": self.__re_imageItemClass})
        for item in images:
            thumbnail_container = item.find(
                "div", attrs={"class": "thumbnail-container"})
            image_details = thumbnail_container.find(
                "a", attrs={"class": "_work-modal-target user-activity"})
            image_id = image_details["data-work-id"]

            # like count
            status_container = thumbnail_container.find(
                "div", attrs={"class": "status-container"})
            bookmarkCount = status_container.text

            imageResponse = 0
            self.itemList.append(
                PixivModel.PixivTagsItem(int(image_id), int(bookmarkCount),
                                         int(imageResponse)))

        if len(self.itemList) > 0:
            self.haveImage = True
        else:
            self.haveImage = False

        # search page info
        self.availableImages = int(payload["body"]["total"])
        if len(payload["body"]["next_url"]) > 0:
            self.isLastPage = False
        else:
            self.isLastPage = True

        return self.itemList
예제 #6
0
    def __init__(self,
                 iid=0,
                 page=None,
                 parent=None,
                 fromBookmark=False,
                 bookmark_count=-1,
                 image_response_count=-1,
                 dateFormat=None):
        self.artist = parent
        self.fromBookmark = fromBookmark
        self.bookmark_count = bookmark_count
        self.imageId = iid
        self.imageUrls = []
        self.dateFormat = dateFormat
        self.descriptionUrlList = []

        if page is not None:
            payload = json.loads(page)

            # check error
            if payload["error"] == True:
                raise PixivException('Image Error: ' + payload["message"],
                                     errorCode=PixivException.SERVER_ERROR)
            # parse image information
            parsed = BeautifulSoup(payload["body"]["html"])

            # parse artist information
            if parent is None:
                parsed = BeautifulSoup(payload["body"]["html"])
                artist_container = parsed.find(
                    'div', attrs={'class': 'header-author-container'})
                artist_link = artist_container.find(
                    'a', attrs={'class': 'user-view-popup'})
                artistId = int(artist_link['data-user_id'])
                self.artist = PixivArtist(artistId, page, fromImage=True)

            if fromBookmark and self.originalArtist is None:
                self.originalArtist = PixivArtist(page=page, fromImage=True)
            else:
                self.originalArtist = self.artist

            # parse image
            self.ParseInfo(parsed)