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))
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))
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'])
def open_browser(self, browser): if browser and self._page_names: # ブラウザで開く libssw.open_ssw(*self._page_names)
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)
def button3_action(): _libssw.open_ssw(g_link_label) _libssw.open_ssw(g_link_series)