AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
⚡️AdsPower:安全不封号,高效自动化⚡️E.PN 虚拟卡⚡️FB BM不限额,短id账单户BINOM TRACKER 60% OFF!
比Adplexity还好用的Spy工具ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款
全球虚拟卡, 支持U充值Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)
FB 三不限源头 - 自助下户充值转款各种主页、账单户、BM户(优势)⚡️TikTok企业户,bm户,账单户提供TK企业新户老户、谷歌新户老户
FB虚拟卡⚡️消费越多返现越多最大欧洲Nutra网盟BA找量优质住宅/移动代理/高匿名/高性能TK白名单老户|兼职广告可投
⚡比特指纹浏览器+云手机, 4.5折起T3NZU:定义应用网盟新时代FB个人号源头服务商寻找顶级电商?AdsBranded等你!
TK老户/国内外端口/预审/加白广告位出租8500万高质量住宅IP,助力各种需求虚拟卡返佣1%,国内持牌机构
查看: 10879|回复: 6

思路,功能介绍及DEMO之5: 如何做一个自己的插件

[复制链接]

55

主题

2630

广告币

2425

积分

论坛嘉宾

积分
2425

社区QQ达人

发表于 2013-5-21 07:46:31 | 显示全部楼层 |阅读模式
HuiTong虚拟卡
你需要在Visual Studio 中,引用 " f4 K( w  Y( a* F3 f0 V! M, b% E
using Mr9.SiteMirror.IPlugin;
2 r$ @4 h6 Z; e4 B$ e3 G/ i3 O* H& ?, Y) |6 o2 f9 W- z
4 Q0 m$ ~& D; s" H' L+ @

, Y$ a/ X5 R6 o7 n+ i4 }# b7 W7 t- ]( t3 m: Q, D
构造中初使化变量: 插件类型,名称,版本,guid,介绍 ,支持URL,和处理的内容类型 ,以及一些你自己可能用到的自己定义的变量.$ {4 K/ }, s7 J4 d

; ~9 D# q( |" i0 o+ [: e3 _' Q7 T
; E9 e! l* S  x
) L# `. u; d+ I有2个函数是你必须要处理的, 来自于  IMr9SMPlugin 接口/ ?  q" q7 v$ [
( c% U8 @. D: V5 r+ h2 w
一个是MANAGE,一个是EXECUTE
! j( K0 n- H$ J2 G$ }9 v0 I
" m4 e% _1 k6 U6 g
. k/ X; W  n+ n
% ^$ n/ j' a/ v; w' T7 j都只有一个参数 和一个标准的返回类型' k+ E+ Y" h6 ^* G
, o0 u5 A* S% B  w

( B+ o# L4 k( \1 s数据结构如上.
2 H5 R7 Z- l1 j5 I% [! d. H$ A. y) x
9 \' L1 V$ @" E7 L- [
你可以获取到当前用户的URL和QUERYSTRING,也可以获取到 POST 数据! |: J& \. u9 O: F( `
也可以知道是GET,还是POST.  当前请求的域名,目标域名等等.
6 R% h7 ]6 D8 z6 k; ]3 y6 |: ~# c1 o1 O" z& q( }
返回类型为PluginResult , 包括 :8 j3 G; n# o% D6 b2 V% T9 x; }. p
Completed = 完成,继续执行下一个0 I9 R* p3 @. T, L0 z) m# ?
Failed = 执行失败,继续下一个
7 r+ n! k" i; @Redirect = 完成,结果跳转到一个指定URL
5 t$ \. p8 d) o; L# ?ShowContent = 完成,后面的插件不处理 ,显示一个 自定义内容.8 m! C7 {# ^% W6 T8 p; p* _3 b
( n6 _4 ?" ~' b6 V$ p) C) D: l
当 结果为 Redirect的时候,StringValue 为 URL,BytesValue 为空. y3 P. U! O! j3 `/ d6 D
当结果为 ShowContent 的时候,StringValue 为 MimeType , BytesValue 为你要显示的内容.如果是HTML要显示,需要先 Encoding.UTF8.GetBytes(html) 一下., `; V! S0 ?! U. m' u
* Q4 N. F) w0 K# [% z9 [
来看看 NOSCRIPT插件 的源代码 .! p0 N' i  v+ ?8 Q# W9 c
这是一个过滤乱七八JS的插件.  逻辑上很简单:5 ]* F. \5 K0 l1 G: e# S
保留当前自己域名下的JS, 和包含JQUERY关键字的JS.别的可能是广告,都干掉. ! ^9 G+ R2 e: S. o% x% l
这个插件的可配置版本,后面有空了整完美.
            PluginResult _Result = new PluginResult();! h# J" J! F" i" c
            _Result.ResultType = PluginResultType.Failed;
2 B+ e* {9 @5 W- w  S1 g% L% L; c1 F/ q7 t, x" R
            if (requestMeta == null)5 ~# g* w  ~8 G( s
                return _Result;  //如果请求信息异常,直接退了
/ g' n! Q' K+ E, b  F! z2 ]; ^4 |" H" E( X. l7 d% |
            if ((requestMeta.ContentType & this._ContentType4Plugin) != ContentTypes.HTML)2 e! e3 P3 \+ t6 F
                return _Result;  //如果内容类型不是HTML的,不处理 .退了
) \- |4 ]! p7 [9 ^% V+ j# G2 ?3 d/ b, l& R( c1 H
            if (!File.Exists(requestMeta.OutputFilePath))8 t% G+ ?  h& V- Y7 C  ^
                return _Result; //如果CACHE文件不存在,退了.. \: \/ E- }/ @) m9 O

- r: K6 Q! F2 S! ?+ l$ V& g. G& D( J6 k( m# u
            try{
  q9 H5 x/ V1 A8 J            string _content = File.ReadAllText(requestMeta.OutputFilePath);  //读取HTML文件内容; D( W) j% V7 u5 h: o

" O) Z6 F0 l. l, `9 h; d; e0 @+ E. o8 Z% G' Z! t3 g+ C2 v2 d: W
            HtmlAgilityPack.HtmlDocument _doc = new HtmlAgilityPack.HtmlDocument();
9 a% ?2 j$ @# Z0 E3 B4 S            _doc.LoadHtml(_content);   //获取 一个DOM解析对像.% I2 e; e8 A, Y! b. L6 P4 M

2 x6 t# E! z6 Y+ p1 E) I/ R6 D: M; y( u, _
            bool _changed = false;   //做个标志,是否有改动.因为没改动,就不需要再写文件了.不然会浪费IO.
6 c* p6 E, m' g# c, B            var _ScriptNodes = _doc.DocumentNode.SelectNodes("//script");   //用XPATH查找所有的SCRIPT对像.
9 \  E" Y: C* K5 J5 Y2 _            if (_ScriptNodes != null)
- K  p* w) R: Y% V1 r                foreach (var item in _ScriptNodes)
: r( Z! [2 Q0 A( H                {
) N8 W  |5 U' L/ L4 ~$ a                    if(item.Attributes["src"]!=null)
0 z+ H0 W7 n# U! Q/ W  S* l6 o                    {
) \: b1 V! e* T: ]& P9 s7 P0 A( e% v                    try/ z) n" z( @1 C/ U, E0 [+ l9 ?9 {) \3 s
                    {
& I2 \  \& c- m                        Uri _url = new Uri(item.Attributes["src"].Value);
$ {- [9 L8 x) i, C4 x; Q4 c0 @) U; f                        if (_url.Host.Equals(requestMeta.Domain, StringComparison.OrdinalIgnoreCase) ||
& m2 @9 S6 T" x6 E5 G3 E                            _url.ToString().IndexOf("jquery") > 0! B/ X3 L/ p6 X% G# F* q5 R1 Z1 m
//如果SCRIPT SRC 的值不为空,并且(域名和当前域名相同,或者包括 JQUERY 关键字的时候,不处理 .7 u, q, l8 d  J: P& z
                            )
" _5 T1 ~3 M7 D. r                            continue;8 ^; P$ `  ^6 c& ~5 n$ M
                        else3 k9 ~4 H& s. X4 Z0 E
                        {
' p. r" V7 }8 F- G                            item.Remove(); //否则干掉.
! ]9 Z3 g3 |, I5 D) }. D. j                            _changed = true; //做个标志,有修改.
# r3 `" M/ f7 J4 ]! t- c                        }' Q& g$ m3 L8 ^4 n; Z5 F$ X: r9 q
                    }. ^$ L/ H; ?8 q0 V
                    catch { }
+ L. z- B7 G" R* Z! G. x6 k                    }) n* J( r6 z2 l, j
                }
' w; L7 Z  w  c- F% C+ S9 L" N; N% S$ b4 S9 U9 h0 k  M

3 K  L( U. Z& Y- \            if (_changed)  //如果发生了修改
) @  x3 Z% t# s9 i& H6 s+ p            {
2 w5 h0 g) u$ N, F) r' Q( d                _content = _doc.DocumentNode.WriteTo();: g. `2 J4 b6 h" ^: s
                File.WriteAllText(requestMeta.OutputFilePath, _content);
  Q' F6 U! R! F* j* X//写回去.
/ `1 @" A3 q) K            }( m' u& {  w2 h: ^0 q- Y

9 R8 B( b; m7 w7 W4 I2 D            _Result.ResultType = PluginResultType.Completed; //设置插件工作完成了.
5 j2 ^" [& t7 n/ F) H. J, L6 ]/ `            return _Result; //返回给SM继续处理 下一个.
- F! ~3 V9 U0 {/ C1 d# e( O0 S: o% I! E  h6 D. U' [
            }& b: I0 w0 ^/ X9 e
            catch{}
. _+ I, l* u1 `
. `5 x& K. o. W) G- i            return _Result;
搞定.
' n# a" }; H: C' Z
  r3 R, g/ _+ o: H) ~! e  W1 m3 s  z' H

2 h5 S4 {' h  R$ D( x# u! @: y* q2 p0 j. B6 }
* y2 ?: u3 K9 l7 Y! B

$ F# i6 o- B* ^5 ~* s2 |

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

本帖被以下淘专辑推荐:

回复

使用道具 举报

45

主题

1855

广告币

3006

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3006

社区QQ达人

发表于 2013-5-21 08:01:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

1173

广告币

1207

积分

高级会员

Rank: 4

积分
1207
发表于 2013-5-21 11:20:33 | 显示全部楼层
这个超实用,但是超级蒙
回复 支持 反对

使用道具 举报

31

主题

241

广告币

438

积分

中级会员

Rank: 3Rank: 3

积分
438

社区QQ达人

发表于 2013-5-22 20:29:08 | 显示全部楼层
看不懂了,,这个
回复 支持 反对

使用道具 举报

2

主题

780

广告币

847

积分

中级会员

Rank: 3Rank: 3

积分
847

社区QQ达人

发表于 2013-6-6 08:28:05 | 显示全部楼层
这是给牛人的课,我等完全败退。
回复 支持 反对

使用道具 举报

1

主题

167

广告币

174

积分

初级会员

Rank: 2

积分
174

社区QQ达人

发表于 2013-10-16 11:20:02 | 显示全部楼层
插件太厉害了
www.5imli.com
回复 支持 反对

使用道具 举报

60

主题

268

广告币

565

积分

中级会员

Rank: 3Rank: 3

积分
565
发表于 2014-1-1 10:34:42 | 显示全部楼层
这个插件能实现过滤所有站的原站的js的广告?
  @. P" d# `' @# H0 }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|DMCA|广告服务|小黑屋|手机版|Archiver|Github|网站地图|AdvertCN

GMT+8, 2025-12-15 18:49 , Processed in 0.050902 second(s), 14 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

快速回复 返回顶部 返回列表