Skip to content

Commit

Permalink
Merge pull request #2 from abbeyokgo/master
Browse files Browse the repository at this point in the history
update
  • Loading branch information
mayunbaba2 authored Jun 19, 2018
2 parents 3b98fb8 + b13ca60 commit 565ff49
Show file tree
Hide file tree
Showing 20 changed files with 1,239 additions and 71 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ __pycache__/
*$py.class

parser.py
parser_.py
data.sqlite

config.py
# C extensions
*.so

Expand Down
Binary file removed 1.png
Binary file not shown.
Binary file removed 2.png
Binary file not shown.
682 changes: 661 additions & 21 deletions LICENSE

Large diffs are not rendered by default.

26 changes: 12 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
1. 首先安装Python。linux自带了python,windows请自行下载python。推荐Centos7/Python2.7
2. 这时候,pip应该可以用了。如果不行,linux请按下面的命令安装pip:
`wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py`
3. 安装依赖库:`pip install -r requirement.txt`
4. 创建数据库:`python rebuildDB.py`
5. 安装`redis`:建议先安装宝塔,然后直接用宝塔安装redis
6. 网站目录下运行:`gunicorn -w4 -b 0.0.0.0:5000 run:app`
3. `/root`目录下解压/git clone下源码:`git clone https://github.com/tangrela/ojbk_jiexi.git`
4. 安装依赖库:`cd ojbk_jiexi && pip install -r requirement.txt`
5. 创建一个`logs`目录: `mkdir logs`
6. 创建数据库:`mv config.sample.py config.py && python rebuildDB.py`
7. 安装`redis`:建议先安装宝塔,然后直接用宝塔安装redis(ps.必须安装redis)
8. 网站目录下运行:`gunicorn -w4 -b 0.0.0.0:5000 run:app`

然后访问 ip:5000 试试
如果不能访问,看看防火墙是否开了5000端口?
Expand Down Expand Up @@ -71,16 +73,12 @@ server {

-----

2018-01-30更新:支持Tumblr导出视频和图片
## 2018-01-30更新

-----

ps:源码核心部分的确是加密的,这里可以放出部分代码截图

**恋恋影视解析部分**

![](1.png)
支持Tumblr导出视频和图片

**91porn解析部分**
## 2018-02-04更新

![](2.png)
1. 新增微博批量解析
2. 优化爬虫
3. 上线1.0反爬虫策略
18 changes: 17 additions & 1 deletion app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,28 @@
#-*- coding=utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
#from celery import Celery,platforms
from flask_pagedown import PageDown
import logging
import datetime
from redis import Redis

# 日志记录
logger = logging.getLogger("ojbk")
logger.setLevel(logging.DEBUG)
ch = logging.FileHandler("/root/ojbk_jiexi/logs/2mm_%(date)s.log" %
{'date': datetime.datetime.now().strftime('%Y-%m-%d')})
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)

rd = Redis(host='localhost', port=6379, db=0)

app = Flask(__name__)
app.config.from_object('config')

# Celery configuration
#celery = Celery(__name__, broker=app.config['CELERY_BROKER_URL'])
db = SQLAlchemy(app, use_native_unicode='utf8')
Expand Down
49 changes: 49 additions & 0 deletions app/decorator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# coding:utf-8
from functools import wraps
from flask import abort, redirect, url_for, g, request, jsonify
from functools import update_wrapper
import time
from flask_login import current_user
from . import rd
from datetime import datetime


class RateLimit(object):
expiration_window = 10

def __init__(self, key_prefix, limit, per, send_x_headers):
self.reset = (int(time.time()) // per) * per + per
self.key = key_prefix + str(self.reset)
self.limit = limit
self.per = per
self.send_x_headers = send_x_headers
p = rd.pipeline()
p.incr(self.key)
p.expireat(self.key, self.reset + self.expiration_window)
self.current = min(p.execute()[0], limit)
remaining = property(lambda x: x.limit - x.current)
over_limit = property(lambda x: x.current >= x.limit)


def get_view_rate_limit():
return getattr(g, '_view_rate_limit', None)


def on_over_limit(limit):
return jsonify(dict(message='限制频率', status='fail')), 200


def ratelimit(limit, per=300, send_x_headers=True,
over_limit=on_over_limit,
scope_func=lambda: request.remote_addr,
key_func=lambda: request.endpoint):
def decorator(f):
def rate_limited(*args, **kwargs):
key = 'rate-limit/%s/%s/' % (key_func(), scope_func())
rlimit = RateLimit(key, limit, per, send_x_headers)
g._view_rate_limit = rlimit
if over_limit is not None and rlimit.over_limit:
return over_limit(rlimit)
return f(*args, **kwargs)
return update_wrapper(rate_limited, f)
return decorator
43 changes: 24 additions & 19 deletions app/models.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,37 @@
#-*- coding=utf-8 -*-
from app import db

#Tumblr
# Tumblr


class ID(db.Model):
__tablename__='id_table'
id=db.Column(db.String(64),primary_key=True)
parseTimes=db.Column(db.Integer,default=0) #解析次数
updateTime=db.Column(db.String(64)) #最近更新时间
__tablename__ = 'id_table'
id = db.Column(db.String(64), primary_key=True)
parseTimes = db.Column(db.Integer, default=0) # 解析次数
updateTime = db.Column(db.String(64)) # 最近更新时间
postnum = db.Column(db.Integer)

def __init__(self,**kwargs):
super(ID,self).__init__(**kwargs)
def __init__(self, **kwargs):
super(ID, self).__init__(**kwargs)

def __repr__(self):
return self.id

#


class Context(db.Model):
__tablename__='context_table'
id=db.Column(db.String(64),primary_key=True)
urls=db.Column(db.String(200),primary_key=True)
isvideo=db.Column(db.Integer,default=0) #0=no,1=yes
poster=db.Column(db.String(200))

def __init__(self,id,urls,isvideo,poster):
self.id=id
self.urls=urls
self.isvideo=isvideo
self.poster=poster
__tablename__ = 'context_table'
uid = db.Column(db.String(64), primary_key=True)
pid=db.Column(db.String(64),primary_key=True)
urls = db.Column(db.String(200))
isvideo = db.Column(db.Integer, default=0) # 0=no,1=yes
poster = db.Column(db.String(200))
posttime = db.Column(db.DateTime())
description = db.Column(db.String(500))

def __init__(self, **kwargs):
super(Context, self).__init__(**kwargs)

def __repr__(self):
return self.id
return self.uid
Binary file modified app/parser.pyc
Binary file not shown.
Binary file added app/static/img/bwh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 15 additions & 3 deletions app/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ <h2>视频&nbsp;<a href="/"><img src="/static/img/logo.png" alt="OJBK视频解
<div class="site-middle container">
<!--窗口提示-->
<div id="message">
<div class="alert alert-warning alert-dismissible fade in hidden-xs" role="alert">
记住本站: <code>{{domain}}</code>完全OJBK
<div class="alert alert-warning alert-dismissible fade in {#hidden-xs#}" role="alert">
记住本站: <code>{{domain}}</code>完全OJBK;
<p>tips</p><p>1. 如果不会使用直接点击下方链接再点击 <span class="glyphicon glyphicon-arrow-right" id="url_submit_icon" aria-hidden="true"></span>试试</p>
<p>2. 如果不能解析对比输入的链接形式是否和下方示例链接格式相同</p>
</div>
</div>
<!--窗口提示-->
Expand Down Expand Up @@ -102,6 +104,16 @@ <h2>视频&nbsp;<a href="/"><img src="/static/img/logo.png" alt="OJBK视频解
</div>
</td>
</tr>
<tr>
<th class="text-center">
<a class="left-title" href="javascript:void(0);">微博批量解析</a>
</th>
<td class="bs-callout bs-callout-info">
<div class="list-unstyled list-group up-list">
<a class="list-group-item get-link" href="#@美少女写真馆">@美少女写真馆</a>
</div>
</td>
</tr>
</table>
</div>
</div>
Expand Down Expand Up @@ -206,7 +218,7 @@ <h2>视频&nbsp;<a href="/"><img src="/static/img/logo.png" alt="OJBK视频解
}
video_html += "<div class=\"panel-heading\"><h3 class=\"panel-title\">视频列表:</h3></div><ul class=\"list-group\">";
$.each(result.video, function(i) {
video_html += "<li class=\"list-group-item\"><p class=\"input-group\"><input type=\"text\" name=\"search\" id=\"video" + i + "\" class=\"form-control get-text\" value=\"" + result.video[i].url + "\"><span class=\"input-group-btn\"><a href=\"javascript:void(0);\" class=\"btn btn-info btnCopy\" data-clipboard-action=\"copy\" data-clipboard-target=\"#video" + i + "\" ><span class=\"glyphicon glyphicon-duplicate\"></span></a><a href=\"" + result.video[i].url + "\" class=\"btn btn-primary get-dowmload\" download=\"title-time.mp4\" role=\"button\" title=\"下载\" ><span class=\"glyphicon glyphicon-save\"></span></a><a href=\"" + result.video[i].url + "\" class=\"btn btn-success\" role=\"button\" title=\"播放\" data-toggle=\"lightbox\" data-title=\"\" data-type=\"video\" data-width=\"1024\"><span class=\"glyphicon glyphicon-play\"></span></a><a class=\"btn btn-default btn-warning hidden-xs\" title=\"扫码看视频\" onclick=\"$.fancybox.open('<div id=\\\'qrcode\\\'></div>');$('#qrcode').qrcode({text:'" + result.video[i].url + "'});\"><span class=\"fa fa-qrcode\"></span></a></span></p><p class=\"get-desc\">简介:" + result.video[i].desc + "</p></li>";
video_html += "<li class=\"list-group-item\"><p class=\"input-group\"><input type=\"text\" name=\"search\" id=\"video" + i + "\" class=\"form-control get-text\" value=\"" + result.video[i].url + "\"><span class=\"input-group-btn\"><a href=\"javascript:void(0);\" class=\"btn btn-info btnCopy\" data-clipboard-action=\"copy\" data-clipboard-target=\"#video" + i + "\" ><span class=\"glyphicon glyphicon-duplicate\"></span></a><a href=\"" + result.video[i].url + "\" class=\"btn btn-primary get-dowmload\" download=\""+result.video[i].desc+".mp4\" role=\"button\" title=\"下载\" ><span class=\"glyphicon glyphicon-save\"></span></a><a href=\"" + result.video[i].url + "\" class=\"btn btn-success\" role=\"button\" title=\"播放\" data-toggle=\"lightbox\" data-title=\"\" data-type=\"video\" data-width=\"1024\"><span class=\"glyphicon glyphicon-play\"></span></a><a class=\"btn btn-default btn-warning hidden-xs\" title=\"扫码看视频\" onclick=\"$.fancybox.open('<div id=\\\'qrcode\\\'></div>');$('#qrcode').qrcode({text:'" + result.video[i].url + "'});\"><span class=\"fa fa-qrcode\"></span></a></span></p><p class=\"get-desc\">简介:" + result.video[i].desc + "</p></li>";
});
video_html += "</ul></div>";
$("#video").html(video_html);
Expand Down
3 changes: 2 additions & 1 deletion app/templates/footer.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<div class="footer-about col-md-5 col-sm-12">
<h4>版权声明</h4>
<p>{{domain}}(下简称OJBK视频解析为广大用户提供视频地址在线解析服务用于用户备份及收藏个人喜爱的视频等OJBK视频解析网不储存发布相关视频视频版权归属其合法持有人所有本站不对使用者的行为负担任何法律责任如果有因为本站而导致您的权益受到损害请与我们联系我们将理性对待协助你解决相关问题联系邮箱admin#3pp.me。</p>
<p><a href="https://bwh1.net/aff.php?aff=6059" target="_blank" class="link">本网站由<img src="/static/img/bwh.png" height="20">强力驱动</a></p>
</div>
<div class="footer-link col-md-3 col-sm-12 hidden-xs">
<h4>友情链接</h4>
Expand All @@ -28,7 +29,7 @@ <h4>加入QQ群</h4>
<div class="footer-bottom">
<ul class="list-inline text-center footer-copyright">
<li>©2018</li>
<script type="text/javascript" src="//js.users.51.la/19386833.js"></script>
<div style="display:none;"><script type="text/javascript" src="//js.users.51.la/19386833.js"></script></div>
</ul>
</div>
</footer>
2 changes: 1 addition & 1 deletion app/templates/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<meta name="description" content="汤不热解析网是专业的视频下载地址解析网站,提供汤不热视频(tumblr)、恋恋影视、1porn的下载地址解析服务,用户可以直接输入视频网址,得到视频文件的真实下载地址。">
<meta name="author" content="kalvin">
<meta http-equiv="Cache-Control" content="no-transform" />
<!-- <meta name="referrer" content="never" /> -->
<meta name="referrer" content="never" />
<meta name="robots" content="index, follow" />
<meta name="applicable-device" content="pc,mobile" />
<meta property="og:title" content="OJBK视频解析,汤不热、恋恋影视、91porn视频解析下载网站" />
Expand Down
Loading

0 comments on commit 565ff49

Please sign in to comment.