コード例 #1
0
ファイル: others2ssw.py プロジェクト: miz999/sswtools
def uncensored(url, release, title, studio, performers, note):
    performers = build_pfmrs(performers)
    verbose('release: ', release)
    verbose('title: ', title)
    verbose('studio: ', studio)
    verbose('performers: ', performers)

    wtxt = []

    if release:
        wtxt.append('//{0[0]}.{0[1]:0>2}.{0[2]:0>2}'.format(release))

    wtxt.append('-[[{}({})>{}]]{}'.format(title, studio, url, note))

    if len(performers) > 1:
        # 出演者情報の作成
        pfmstr, anum = libssw.stringize_performers(performers,
                                                   number=0,
                                                   follow=FOLLOW_RDR)
        wtxt.append('--出演者:{}'.format(pfmstr))

    wtxt = '\n'.join(wtxt)
    print(wtxt)
    if COPY:
        libssw.copy2clipboard(wtxt)
    if BROWSER:
        libssw.open_ssw(*(p[1] or p[0] for p in performers))
コード例 #2
0
ファイル: others2ssw.py プロジェクト: miz999/sswtools
def censored(url,
             release,
             title,
             label,
             performers,
             img_s,
             img_l,
             note,
             pno=False,
             width=False):
    performers = build_pfmrs(performers)
    verbose('release: ', release)
    verbose('title: ', title)
    verbose('label: ', label)
    verbose('performers: ', performers)

    wtxt = []

    if release:
        # wtxt.append('//{0[0]}.{0[1]:0>2}.{0[2]:0>2}'.format(release))
        if pno:
            print('//{0[0]}.{0[1]:0>2}.{0[2]:0>2}'.format(release) + " " + pno)
        else:
            print('//{0[0]}.{0[1]:0>2}.{0[2]:0>2}'.format(release))

    if label:
        print('[[{}({})>{}]] [[(レーベル一覧>{})]]'.format(title, label, url, label))
    else:
        print('[[{}({})>{}]]'.format(title, label, url))

    if width:
        print('[[&ref({}, {})>{}]]'.format(img_s, width, img_l))
    else:
        print('[[{}>{}]]'.format(img_s, img_l))

    if len(performers) > 1:
        # 出演者情報の作成
        pfmstr, anum = libssw.stringize_performers(performers,
                                                   number=0,
                                                   follow=FOLLOW_RDR)
        wtxt.append('--出演者:{}'.format(pfmstr))

    if note:
        wtxt.append(note)

    wtxt = '\n'.join(wtxt)
    print(wtxt)
    if COPY:
        libssw.copy2clipboard(wtxt)
    if BROWSER:
        libssw.open_ssw(*(p[1] or p[0] for p in performers))
コード例 #3
0
ファイル: dmm2ssw.py プロジェクト: ume1632/sswtools
def main(props=_libssw.Summary(), p_args=_argparse.Namespace, dmmparser=None):

    # モジュール呼び出しの場合継承したコマンドライン引数は無視
    argv = [props.url] if __name__ != '__main__' else _sys.argv[1:]
    args = _get_args(argv, p_args)

    # 作品情報
    summ = _libssw.Summary()

    if __name__ == '__main__':
        _verbose('args: ', args)
        if not args.url:
            # URLが渡されなかったときは標準入力から
            _verbose('Input from stdin...')

            data = _sys.stdin.readline().rstrip('\n')

            if not data:
                _emsg('E', 'URLを指定してください。')

            for key, data in zip(('url', 'title', 'pid', 'actress', 'number',
                                  'director', 'director', 'note'),
                                 data.split('\t')):
                if key == 'url':
                    summ[key] = data.split('?')[0]
                elif key == 'actess':
                    summ[key] = list(_libssw.parse_names(data))
                elif key == 'number':
                    summ[key] = int(data) if data else 0
                elif key == 'director':
                    summ[key] = _libssw.re_delim.split(data)
                elif key == 'note':
                    summ[key].append(data)
                else:
                    summ[key] = data

            _verbose('summ from stdin: ', summ.items())

        for attr in ('url', 'number', 'pid', 'subtitle'):
            if not summ[attr]:
                summ[attr] = getattr(args, attr)

        if not summ['actress'] and args.actress:
            actiter = _chain.from_iterable(
                map(_libssw.re_delim.split, args.actress))
            summ['actress'] = list(_libssw.parse_names(actiter))

    else:
        _verbose('props: ', props.items())
        _verbose('p_args: ', vars(p_args))

        summ.update(props)

    summ['link_label'] = getattr(args, 'label')
    summ['link_series'] = getattr(args, 'series')

    retrieval = getattr(p_args, 'retrieval',
                        'series' if args.as_series else 'find')
    service = getattr(p_args, 'service', None)
    series_guide = getattr(p_args, 'series_guide', True)

    if args.actress and args.actress[0].startswith('@@'):
        # ウィキテキストで直接指定
        rawpfmrs = args.actress[0][2:]
    else:
        rawpfmrs = ''

    # サービス未指定時の自動決定
    if not service:
        service = _libssw.resolve_service(summ['url'])
    _verbose('service resolved: ', service)

    if service == 'ama':
        # 動画(素人)の場合監督欄は出力しない。
        args.dir_col = False

    join_d = dict()
    _libssw.ret_joindata(join_d, args)

    if (args.join_tsv or args.join_wiki or args.join_html) and not len(join_d):
        _emsg('E', '--join-* オプションで読み込んだデータが0件でした。')

    # URLを開いて読み込む
    resp, he = _libssw.open_url(summ['url'], set_cookie='age_check_done=1')

    if resp.status == 404:
        # 404の時、空のエントリを作成(表形式のみ)して返す
        _emsg('I', 'ページが見つかりませんでした: ', summ['url'])
        if not summ['pid']:
            summ['pid'], summ['cid'] = _libssw.gen_pid(summ['url'])
        if p_args.cid_l:
            summ['url'] = ''
        else:
            if not summ['subtitle']:
                summ['subtitle'] = summ['title']
            summ['image_sm'], summ['image_lg'] = _build_image_url(
                service, summ['cid'])
        wktxt_t = _format_wikitext_t(summ, '', '/'.join(summ['director']),
                                     args.dir_col,
                                     _build_addcols(args.add_column,
                                                    summ), retrieval)
        _verbose('wktxt_t: ', wktxt_t)
        return False, resp.status, _ReturnVal(summ['release'],
                                              summ['pid'],
                                              summ['title'],
                                              summ['title_dmm'],
                                              summ['url'],
                                              summ['time'],
                                              summ('maker', 'maker_id'),
                                              summ('label', 'label_id'),
                                              summ('series', 'series_id'),
                                              summ['actress'],
                                              summ['link_label'],
                                              summ['link_series'],
                                              wktxt_a='',
                                              wktxt_t=wktxt_t)
    elif resp.status != 200:
        return False, resp.status, ('HTTP status', resp.status)

    # 構文ミスの修正
    # html = _libssw.sub(sub_href, html)

    # HTMLの解析
    if not dmmparser:
        dmmparser = _libssw.DMMParser(autostrip=args.autostrip,
                                      longtitle=args.longtitle,
                                      check_rental=args.check_rental,
                                      check_rltd=args.check_rltd)

    try:
        summ.update(dmmparser(he, service, summ, ignore_pfmrs=rawpfmrs))
    except _libssw.OmitTitleException as e:
        # 除外対象なので中止
        return False, 'Omitted', (e.key, e.word)

    _verbose('summ: ', summ.items())

    if dmmparser.data_replaced:
        service = dmmparser.data_replaced

    # joinデータがあったら補完
    if summ['url'] in join_d:
        summ.merge(join_d[summ['url']])

    if args.pid:
        summ['pid'] = args.pid

    # 画像がまだないときのリンク自動生成
    if not summ['image_lg']:
        summ['image_sm'], summ['image_lg'] = _build_image_url(
            service, summ['cid'])
        _verbose('image_sm: ', summ['image_sm'])
        _verbose('image_lg: ', summ['image_lg'])

    #
    # タイトルの調整
    #
    # 削除依頼対応
    for dl in _libssw.HIDE_NAMES_V:
        summ['title'] = summ['title'].replace(dl, '').strip()

    on_dmm = summ['title']
    # wiki構文と衝突する文字列の置き換え
    modified = _libssw.trans_wikisyntax(on_dmm)
    if _AUTOMODIFY:
        # ♥の代替文字列の置き換え
        modified = _libssw.sub(_sub_heart, modified)

    summ['title'] = modified
    if not summ['title_dmm'] and modified != on_dmm:
        summ['title_dmm'] = on_dmm
    _verbose('summ[title]: ', summ['title'])
    _verbose('summ[title_dmm]: ', summ['title_dmm'])

    # レーベル/シリーズ一覧へのリンク情報の設定
    if (not args.hide_list) and args.check_listpage:
        _resolve_pagelink(summ, args)
    _verbose('summ[link_label]: ', summ['link_label'])
    _verbose('summ[link_series]: ', summ['link_series'])

    if args.note:
        summ['note'] = list(_expansion(args.note, summ)) + summ['note']
    _verbose('note: ', summ['note'])

    add_column = _build_addcols(args.add_column, summ)
    _verbose('add column: ', add_column)

    # 出演者文字列の作成
    pfmrslk = ()
    if rawpfmrs:
        # ウィキテキスト
        pfmrslk = _libssw.re_linkpare.findall(rawpfmrs)
        pfmrsstr, pnum = rawpfmrs, len(pfmrslk)
    elif len(summ['actress']) < 2 and not summ['number'] and args.table == 0:
        # 女優ページ用のみ作成で出演者数が1人ならやらない
        pfmrsstr, pnum = '', 0
    else:
        pfmrsstr, pnum = _libssw.stringize_performers(summ['actress'],
                                                      summ['number'],
                                                      args.follow_rdr)

    # 監督文字列の作成
    dirstr = '/'.join(summ['director'])

    # table形式用副題の生成
    if retrieval == 'series':
        # シリーズ名が list_page にあってタイトルの先頭からシリーズ名と
        # 同じ文字列があれば落とす。
        # list_page に値がなければタイトルをそのまま入れる。
        if not summ['subtitle']:
            summ['subtitle'] = _re.sub(r'^{}[、。!?・…♥]*'.format(summ['series']),
                                       '',
                                       summ['title'],
                                       flags=_re.I).strip()

    elif not summ['subtitle']:
        # タイトルをそのまま副題に(表形式用)
        summ['subtitle'] = summ['title']
    _verbose('subtitle: ', summ['subtitle'])

    # 未取得情報のチェック
    if _VERBOSE:
        _check_missings(summ)

    # ウィキテキストの作成
    wikitext_a = _format_wikitext_a(summ, pnum, pfmrsstr,
                                    service) if args.table != 1 else ()
    wikitext_t = _format_wikitext_t(summ, pfmrsstr, dirstr, args.dir_col,
                                    add_column,
                                    retrieval) if args.table else ''

    if __name__ != '__main__':
        # モジュール呼び出しならタプルで返す。
        return True, summ['url'], _ReturnVal(
            summ['release'], summ['pid'], summ['title'],
            summ['title_dmm'], summ['url'], summ['time'],
            summ('maker', 'maker_id'), summ('label', 'label_id'),
            summ('series', 'series_id'), summ['actress'], summ['link_label'],
            summ['link_series'], wikitext_a, wikitext_t)
    else:
        # 書き出す
        output = ['']
        if wikitext_a:
            output.append(wikitext_a)

        if wikitext_t:
            output.append(wikitext_t)

        print(*output, sep='\n')

        if args.copy:
            _verbose('copy 2 clipboard')
            _libssw.copy2clipboard(''.join(output))

        if args.browser:
            # wikiのページを開く
            if args.table != 1:
                pages = pfmrslk or summ['actress']
                for a in pages:
                    _libssw.open_ssw(a[1] or a[0])
            if args.table:
                _libssw.open_ssw(summ['link_label'])
                _libssw.open_ssw(summ['link_series'])
コード例 #4
0
 def open_browser(self, browser):
     if browser and self._page_names:
         # ブラウザで開く
         libssw.open_ssw(*self._page_names)
コード例 #5
0
ファイル: sswchkactp.py プロジェクト: miz999/sswtools
def main():
    args = get_args()
    verbose('args: ', args)

    # 一覧ページからチェックする作品情報を取得
    if args.from_wikitext:
        targets = OrderedDict(libssw.from_wiki((args.target, )))
        listname = libssw.from_wiki.article and libssw.from_wiki.article[0][0]
    else:
        targets = OrderedDict(libssw.from_html((args.target, ), cache=False))
        listname = libssw.from_html.article

    # 一覧ページ名の取得
    listname = args.list_name or listname
    verbose('listname: ', listname)

    if not listname:
        emsg('E', '一覧ページ名を取得できませんでした。-l オプションで指定してください。')

    # listp_url = gen_sswurl(listname)
    listp = libssw.quote(listname)
    verbose('quoted listp: ', listp)

    print('ページ名:', listname)

    not_sid = libssw.NotKeyIdYet(args.start_pid, 'start', 'pid')
    before = True if args.start_pid else False

    shortfalls = set()

    for prod_url in targets:

        # 作品情報
        props = targets[prod_url]
        verbose('props: ', props.items())

        if before and not_sid(libssw.gen_pid(prod_url)):
            continue
        else:
            before = False

        if not props.actress:
            continue

        if any('総集編' in n for n in props.note):
            continue

        print('\nTITLE: {}'.format(props.title))
        print('URL:   {}'.format(prod_url))

        notfounds = []

        # 作品の出演者情報
        for actr in props.actress:

            if not any(actr[:2]):
                continue
            else:
                shown = actr[0]
                dest = actr[1] or actr[0]

            result = ''

            print('* {}({}):'.format(dest, shown)
                  if shown != dest else '* {}:'.format(shown),
                  '...\b\b\b',
                  end='')

            rdr = libssw.follow_redirect(dest)
            if rdr and rdr != dest:
                dest = rdr
                print('(リダイレクトページ) ⇒ {}: '.format(rdr), end='')

            actr_url = gen_sswurl(dest)

            # 女優名のページをチェック
            present, link2list, linked = check_actrpage(
                actr_url, listp, prod_url)
            verbose('present: {}, link2list: {}, linked: {}'.format(
                present, link2list, linked))

            if not present:

                notfounds.append(dest)
                shortfalls.add(dest)

                if link2list == 404:
                    result += '✕ (女優ページなし)'.format(shown)
                else:
                    # 女優ページになかったら作品URLで検索してヒットしたWikiページでチェック
                    for purl, label in searchwiki_by_url(prod_url):
                        if label.startswith(dest):
                            present, link2list, linked = check_actrpage(
                                purl, listp, prod_url)
                            if present:
                                result += ' ⇒ {}'.format(label)
                                break
                    else:
                        result += '✕ (女優ページあり)'
            else:

                if linked:
                    result += '○'
                elif link2list:
                    result += '△ (他の一覧ページへのリンクあり: {})'.format(','.join(
                        '"{}"'.format(libssw.unquote(p)) for p in link2list))
                else:
                    result += '△ (一覧ページへのリンクなし)'

            print(result, actr_url)

        # ウィキテキストの作成
        if notfounds and args.gen_wikitext:
            props['title'] = ''  # 副題の時もあるので一旦リセット
            b, status, data = dmm2ssw.main(props=props,
                                           p_args=argparse.Namespace(
                                               note=args.note,
                                               series=args.series,
                                               label=args.label,
                                               linklabel=args.linklabel,
                                               hide_list=args.hide_list,
                                               smm=False))
            verbose('Return from dmm2ssw: {}, {}, {}'.format(b, status, data))
            if b:
                print()
                print(data.wktxt_a)

                if args.browser:
                    libssw.open_ssw(notfounds)
コード例 #6
0
def button3_action():
    _libssw.open_ssw(g_link_label)
    _libssw.open_ssw(g_link_series)