From 951670d2abfc8831b060f5a23b272b68c562c219 Mon Sep 17 00:00:00 2001 From: eliasdabbas Date: Thu, 8 Feb 2018 02:56:19 +0100 Subject: [PATCH] Add new documentation --- docs/_build/doctrees/ad_create.doctree | Bin 55515 -> 0 bytes docs/_build/doctrees/ads.doctree | Bin 15710 -> 0 bytes .../doctrees/advertools.ad_create.doctree | Bin 0 -> 8011 bytes .../advertools.ad_from_string.doctree | Bin 0 -> 10340 bytes docs/_build/doctrees/advertools.doctree | Bin 0 -> 3599 bytes .../doctrees/advertools.kw_generate.doctree | Bin 0 -> 11543 bytes .../doctrees/advertools.stopwords.doctree | Bin 0 -> 4369 bytes .../doctrees/advertools.url_builders.doctree | Bin 0 -> 8341 bytes .../advertools.word_frequency.doctree | Bin 0 -> 10573 bytes docs/_build/doctrees/environment.pickle | Bin 21015 -> 21858 bytes docs/_build/doctrees/index.doctree | Bin 4921 -> 4784 bytes docs/_build/doctrees/keywords.doctree | Bin 11340 -> 0 bytes docs/_build/doctrees/modules.doctree | Bin 0 -> 2585 bytes .../{kw_test.doctree => setup.doctree} | Bin 3089 -> 2697 bytes docs/_build/doctrees/urls.doctree | Bin 8107 -> 0 bytes docs/_build/doctrees/user_reference.doctree | Bin 32993 -> 0 bytes docs/_build/doctrees/word_freq.doctree | Bin 2669 -> 0 bytes docs/_build/doctrees/word_frequency.doctree | Bin 3075 -> 0 bytes docs/_build/html/.buildinfo | 2 +- docs/_build/html/.doctrees/environment.pickle | Bin 3979 -> 0 bytes docs/_build/html/.doctrees/index.doctree | Bin 4784 -> 0 bytes docs/_build/html/.nojekyll | 0 .../html/_images/text_ad_screen_shot.png | Bin 48387 -> 0 bytes docs/_build/html/_images/textad_diagram.png | Bin 36566 -> 0 bytes .../html/_modules/advertools/ad_create.html | 9 +- .../_modules/advertools/ad_from_string.html | 9 +- .../html/_modules/advertools/kw_generate.html | 9 +- .../_modules/advertools/url_builders.html | 9 +- .../_modules/advertools/word_frequency.html | 127 + docs/_build/html/_modules/index.html | 8 +- docs/_build/html/_sources/ad_create.ipynb.txt | 621 - docs/_build/html/_sources/ad_create.md.txt | 440 - docs/_build/html/_sources/ad_create.rst.txt | 483 - docs/_build/html/_sources/ads.rst.txt | 10 - .../_sources/advertools.ad_create.rst.txt | 7 + .../advertools.ad_from_string.rst.txt | 7 + .../_sources/advertools.kw_generate.rst.txt | 7 + docs/_build/html/_sources/advertools.rst.txt | 22 + .../_sources/advertools.stopwords.rst.txt | 7 + .../_sources/advertools.url_builders.rst.txt | 7 + .../advertools.word_frequency.rst.txt | 7 + docs/_build/html/_sources/index.rst.txt | 19 +- docs/_build/html/_sources/keywords.rst.txt | 7 - docs/_build/html/_sources/kw_test.rst.txt | 7 - docs/_build/html/_sources/modules.rst.txt | 8 + docs/_build/html/_sources/setup.rst.txt | 7 + docs/_build/html/_sources/urls.rst.txt | 7 - .../html/_sources/user_reference.rst.txt | 26 - docs/_build/html/_sources/word_freq.rst.txt | 8 - .../html/_sources/word_frequency.rst.txt | 9 - docs/_build/html/_static/jquery-3.1.0.js | 10074 ---------------- docs/_build/html/ad_create.html | 876 -- docs/_build/html/advertools.ad_create.html | 119 + ...ds.html => advertools.ad_from_string.html} | 38 +- .../html/{word_freq.html => advertools.html} | 34 +- ...words.html => advertools.kw_generate.html} | 17 +- docs/_build/html/advertools.stopwords.html | 111 + ...urls.html => advertools.url_builders.html} | 15 +- .../html/advertools.word_frequency.html | 104 + docs/_build/html/genindex.html | 38 +- docs/_build/html/index.html | 25 +- .../{word_frequency.html => modules.html} | 39 +- docs/_build/html/objects.inv | Bin 824 -> 508 bytes docs/_build/html/py-modindex.html | 24 +- docs/_build/html/search.html | 7 - docs/_build/html/searchindex.js | 2 +- docs/_build/html/{kw_test.html => setup.html} | 15 +- docs/_build/html/user_reference.html | 227 - docs/ad_create.ipynb | 621 - docs/ads.rst | 10 - docs/advertools.ad_create.rst | 7 + docs/advertools.ad_from_string.rst | 7 + docs/advertools.kw_generate.rst | 7 + docs/advertools.rst | 22 + docs/advertools.stopwords.rst | 7 + docs/advertools.url_builders.rst | 7 + docs/advertools.word_frequency.rst | 7 + docs/conf.py | 18 +- docs/index.rst | 19 +- docs/keywords.rst | 7 - docs/make.bat | 36 - docs/modules.rst | 8 + docs/requirements.txt | 1 - docs/setup.rst | 7 + docs/text_ad_screen_shot.png | Bin 48387 -> 0 bytes docs/textad_diagram.png | Bin 36566 -> 0 bytes docs/urls.rst | 7 - docs/word_freq.rst | 8 - 88 files changed, 742 insertions(+), 13718 deletions(-) delete mode 100644 docs/_build/doctrees/ad_create.doctree delete mode 100644 docs/_build/doctrees/ads.doctree create mode 100644 docs/_build/doctrees/advertools.ad_create.doctree create mode 100644 docs/_build/doctrees/advertools.ad_from_string.doctree create mode 100644 docs/_build/doctrees/advertools.doctree create mode 100644 docs/_build/doctrees/advertools.kw_generate.doctree create mode 100644 docs/_build/doctrees/advertools.stopwords.doctree create mode 100644 docs/_build/doctrees/advertools.url_builders.doctree create mode 100644 docs/_build/doctrees/advertools.word_frequency.doctree delete mode 100644 docs/_build/doctrees/keywords.doctree create mode 100644 docs/_build/doctrees/modules.doctree rename docs/_build/doctrees/{kw_test.doctree => setup.doctree} (53%) delete mode 100644 docs/_build/doctrees/urls.doctree delete mode 100644 docs/_build/doctrees/user_reference.doctree delete mode 100644 docs/_build/doctrees/word_freq.doctree delete mode 100644 docs/_build/doctrees/word_frequency.doctree delete mode 100644 docs/_build/html/.doctrees/environment.pickle delete mode 100644 docs/_build/html/.doctrees/index.doctree create mode 100644 docs/_build/html/.nojekyll delete mode 100644 docs/_build/html/_images/text_ad_screen_shot.png delete mode 100644 docs/_build/html/_images/textad_diagram.png create mode 100644 docs/_build/html/_modules/advertools/word_frequency.html delete mode 100644 docs/_build/html/_sources/ad_create.ipynb.txt delete mode 100644 docs/_build/html/_sources/ad_create.md.txt delete mode 100644 docs/_build/html/_sources/ad_create.rst.txt delete mode 100644 docs/_build/html/_sources/ads.rst.txt create mode 100644 docs/_build/html/_sources/advertools.ad_create.rst.txt create mode 100644 docs/_build/html/_sources/advertools.ad_from_string.rst.txt create mode 100644 docs/_build/html/_sources/advertools.kw_generate.rst.txt create mode 100644 docs/_build/html/_sources/advertools.rst.txt create mode 100644 docs/_build/html/_sources/advertools.stopwords.rst.txt create mode 100644 docs/_build/html/_sources/advertools.url_builders.rst.txt create mode 100644 docs/_build/html/_sources/advertools.word_frequency.rst.txt delete mode 100644 docs/_build/html/_sources/keywords.rst.txt delete mode 100644 docs/_build/html/_sources/kw_test.rst.txt create mode 100644 docs/_build/html/_sources/modules.rst.txt create mode 100644 docs/_build/html/_sources/setup.rst.txt delete mode 100644 docs/_build/html/_sources/urls.rst.txt delete mode 100644 docs/_build/html/_sources/user_reference.rst.txt delete mode 100644 docs/_build/html/_sources/word_freq.rst.txt delete mode 100644 docs/_build/html/_sources/word_frequency.rst.txt delete mode 100644 docs/_build/html/_static/jquery-3.1.0.js delete mode 100644 docs/_build/html/ad_create.html create mode 100644 docs/_build/html/advertools.ad_create.html rename docs/_build/html/{ads.html => advertools.ad_from_string.html} (59%) rename docs/_build/html/{word_freq.html => advertools.html} (62%) rename docs/_build/html/{keywords.html => advertools.kw_generate.html} (82%) create mode 100644 docs/_build/html/advertools.stopwords.html rename docs/_build/html/{urls.html => advertools.url_builders.html} (84%) create mode 100644 docs/_build/html/advertools.word_frequency.html rename docs/_build/html/{word_frequency.html => modules.html} (61%) rename docs/_build/html/{kw_test.html => setup.html} (78%) delete mode 100644 docs/_build/html/user_reference.html delete mode 100644 docs/ad_create.ipynb delete mode 100644 docs/ads.rst create mode 100644 docs/advertools.ad_create.rst create mode 100644 docs/advertools.ad_from_string.rst create mode 100644 docs/advertools.kw_generate.rst create mode 100644 docs/advertools.rst create mode 100644 docs/advertools.stopwords.rst create mode 100644 docs/advertools.url_builders.rst create mode 100644 docs/advertools.word_frequency.rst delete mode 100644 docs/keywords.rst delete mode 100644 docs/make.bat create mode 100644 docs/modules.rst delete mode 100644 docs/requirements.txt create mode 100644 docs/setup.rst delete mode 100644 docs/text_ad_screen_shot.png delete mode 100644 docs/textad_diagram.png delete mode 100644 docs/urls.rst delete mode 100644 docs/word_freq.rst diff --git a/docs/_build/doctrees/ad_create.doctree b/docs/_build/doctrees/ad_create.doctree deleted file mode 100644 index 28dabdffd2e2bd993f15055c8abc7e8daa1fe43a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55515 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 bgqcIq9&gSbGwZ=grtp!B`R;k%bC~>p%-RZ1 diff --git a/docs/_build/doctrees/ads.doctree b/docs/_build/doctrees/ads.doctree deleted file mode 100644 index 23cd788cff7c55b5b7b95b422ba9648e4969ded6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15710 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/advertools.ad_from_string.doctree b/docs/_build/doctrees/advertools.ad_from_string.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b71b8953ceb2498e660f0b2cff655e9798fcc27 GIT binary patch literal 10340 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/advertools.url_builders.doctree b/docs/_build/doctrees/advertools.url_builders.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8ed511790de6585c2fab59b2c1ef1dea4fa7e87a GIT binary patch literal 8341 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/advertools.word_frequency.doctree b/docs/_build/doctrees/advertools.word_frequency.doctree new file mode 100644 index 0000000000000000000000000000000000000000..368e70b0526d2edb154531f50affc4e121d376c9 GIT binary patch literal 10573 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 31495c9c87e8b1068ca397b73501ba95615b99cd..238327f47ad6d0f813b05155a2208730c9478080 100644 GIT binary patch literal 21858 zcmb_kdyE`Od0)TQ_WE__BP0&;xxOwV@D z_Ds+AV`ujcBNBxJq>k=@4umL*4k6`503-2Fh@u3dh>({^l!Qo8q6kGOA%77m5qU`D z_kC5>T|LwDIPNU>Y6xde_+NZH=-N(ayJB^=9N+7-txlN4 zcU_4bx3Q!ZeKMK-x#V_Ij%ONPJ@hTB;rL1Xj`^np%Ma$4T*nONuUf%I=ym7K#+K!W zp63Sh01oD>HNr;s)G$cm>A^w%uxITWypcG+h%^05jx@D}vAr zoqEcW{b)}G#1B!A`Ky^ePvP#jzny1n#;kc!SfTnPKGrd}oOQJEI3BnDhMpo zuiG_mTNWH@cpc1yc(Q`{ZbD^SZnp~Jtd2>f9?7`Md_PKaw_OFRc$_3s$3zjTBT)u% zvW@s?*0O>oN&FL8fpJv=Gl5BbI6pblZL<@ZZbGwu5cl8dL$Kk_XK7y*(YM-$&O{X4t}5kb>Ha{iwv)6NWrOKjMto?Zn=y!+2egqcGL6Q zG`;}Z6hyUr>5Of zFYI`sRrRf=<%0z1b=RyD$BwOoW3WMBE|>@f{%Cwe*$I@9McHjZJr4(M(+{hg5zv5L zQGBr4GyP68>eQ3#_NnFb@l4Z;It>zlAbAPgmnJTLLndz(vr(=47DP9Re^M*%d48kX z^sUVZwCyDEk85?94WaKa6tE6$uMxSRAbz6;v(c-rTOF81LYy-|dglQ=0QH2%dgq|2 z>3eO6iO=&QP1?)x0n>HGa7dVB@uQdj?$`eP)LUo2n2{ojwrA}w-#-6=U$|gzh}+wr zD%-xe{or^1(Duabhd#H<-W0bV|M`dPwz&Po2cEQDar>)({y%n0+|zIj5(F)ifhFY&e*{PbTpJa%#{5RPBL2pyzU_-wj8bB7hqZb4+*R%kZN&`j(X><`3yrAYAn+grC2yN9cb zYXg^$%fq#atBuRW)w-QT@iZG9wxRYG+omXV+@R8dIe<{@<7$YNjJpo{W=}*5NjwGd ztJ{dFU}fMa?B9;}-h_1_u`EAhxiB)85qd@@T;KW7X97bx4R%BKL0mbYv%eJIU)ZKJ z&?25D2Y~p{{z6nkh=OpzcWM!tD$?CO4wN1t%>KG-vbo3oK60#FdY}SYay(yz8v+0Jg z%^GRM058GQH-u7APxU0nYvctRBT1r%r^L=E06VlKwpy4eU@``RQ2g%Up@D_pIN*%p|1t}*cB*iTtMeCrFH^Qoe zj3*~DvTrf)tt=u@&>&}FLULLK78t9WlnQ5%`2Etu>>wFuz_;!Fn%K4s>WwJQVQ zAk|bItQQBX<709Gir`v0jJsuQiS+|kuD;o|2bvMmG&mis{mPHxJ?!5FD{DF{3+yg= zRa#nNne)+j8YD!%lfdiEn4P-qp&Y9(`wpzLP9N~DjloMT3dW6=&v47ud+{glM_NCF zBDfr}88OI&VXh-{ep~T=I6;_isVk`^53V9|}>qme96#WOiP`2J|nxv zOtgGpM<<^j(+Pp@2+-f00Q5HmsNmR09=Bd$bat;u_y<{CZcWN-J0sj-trX*aYz&!`j5|Jb65C{|D;k*O!O|Gy z8V{}v<3VefrWQ?7x(4m`X{x>nm2Qo&&W_lJB9$Jt$3=BI(lmr;q(gVlsF~hlJ|srl zBFo`{H?2+j3Fs%HpC0|};77M6Km9}edtD96ZAhpvC=X0zP%?w4*_8c|v*$qSDE%T) zxFOU*h=Q~!1+z?`PYclZFxCPsnb>a~yT-ej1~!5?0Mi15fhr8+(_@A)k-8i|DRkvb z#x2@>P+F6W=|j_+k52%aW7TM`$_WtmXf&wAYD_=?VWmxs0t5G2W=>ydrz$JR7W z55^$WIQpLxfJ%=3#{{5~qu%Sx(MdO?T1SK_yMNDU16j;bZ#YL!jzOq#)R+KNa`fH_ zKqW^vC*$bk0gbNlslOf2_|}^QL*F}w(qe{g4rl1~F$gt=E;Hz4p#jNAt~~~|Huly8pi-FDCjcd3!q@~yC-O;;O^6jfsr@=n z(Zn0CtywXw-x@<}@szcP3+bQrvBvwppvP7HUX$)YU_1oYJR&rT^zQS1OtCKhO%M?wuUqC|HdHH z82H~4fJz4b*94$~fl+)6d%9I@n<7C&?9TE|`|@tPx4g^lF7L57@Yl!X;o3xb8-HC~ zt>s-2a<$MJ=^$d?mA2_c5%SKoqPyh2G0y7wlvr-(<0P%OmgpNmc9)(W%9f|1cu&3CWr#yQa$u^# zPP^tIyGLc&32Z@ypyKHjQJbE4d=;B)Ncif6PSZh-*mba7X3gEeK}I`3$zfG;*+IdOxtEUUv>@eRg&W$oK#y^DyCn*Y^qXF*yr52bu&0+^KtVMC}D()ZRqK1d>ARl66-FrI54L0$@!Mf4LN>h7FL zpX@uWmk5>`#D}km9hrVazoH?U773h5>lGB{S|3{B)K23DWoTqnd^T&0BU`hB)3S8< zJZAo}@4T3_ei@*x&oEv*Q3tY@7n5{WkPgP<$T<^X=h?R7oDGR=#JGDh{WQuLFf!+6 z!A^0fZvfeMt|Q&j-dIb@<<^(cYpkyzQ+uHydD8$A-Ix$MiD)iuU7j_{PDch#dSsPC z%qFch9y^*_wx3a>8-u(x(nyk+wQ&ttA&ssF^LR!PrzMww!dgb5mrRqGj5o1kiN60%ith& z$owd&Mwry0gVY;il$~spZbp|b9eLBLQC1)wdDt9n59aHJ(w7GVg+WGPi!#WL$~@(| zjpTc*o?#BBoi^uD$A@I51ZCGD1N{-4(^IhUbjR7eDsnk-Ncd7xLm1(TL;Ti10=+Ce z?jf<>LE=J{@gWJ>A?yb!BB{y%DLw>?OL^0j;!Cy1s>tN*I`xezf=5c0r%0=+-X5rm z*%NkIcc!U^Cgo@M@0*%J#wmnBrgN253^Zr>7G5f-i=6a1qlpAsN~fDMaO8-r<<8;* z3$qtz4E#HB;>6>ewrp5t-KIQn&WvTV1N^#foD*L595?Plqm7!w4=5G7JEHV0Pe1bDI=Rm z;E}y@TmE?pubki=3ci>8;d{Xe8pcIr=m#OqhU9+MSZ)94tXuNQ{G-s@qypDyxrLgDm9~jJK`=job7oz-2u4uzV74s;QjyUz30 z;v*(_l9^*9fx%U&PK@V*=QvTj1Kl=iJ4VoT9e%Y2))+GhQ?~AVQ8yrCK~6BJFq@Xh znsW_GNos6!%YxC(%oA*G+k=rIyVz&ENKir>05q10Ch3n0_Ygv1T@4k{h&ROW#ve>2 z(24py(mCn`a!0!cuk!_7ov zv;!hHl6oF+ETdqKeVWnnKqDDl@luC@ccTQ$L_a*agoB(R-g7}V8Bs;4i|aHD!8waG zg}s7kE6Uly5&|X`q5wRY(4OsJs!~E|vU!ea<^`8hQ9*;AZGpqSff>S!LBP(nAQ385k^jlJ|Jo4-!Jt$1g}pAtxv&&}Cql_oB##WRw`( z=e;xu8tcAvZ7LzipzdkPkONBSrE$YcEO2KxsrvE2xNNL&_2mZnjDc&=D-G#{Ts+u@ zK~S!s(3{ZQ09SgR627K`rMOV?A+$Upuv~5!mx1LO(mo>TCLy{BL{B!2o8a;zjA(_d z#VCrEUlBqR`c+nP81oFm^@XtZ~LTn*p=LDaVL++|0(R zvnCvv7|*Iiv_|fcXw0{z_BFWvjZ}WAL=KiwkwcU&u@9pGuckqg10vb(gUTURqdL84 zoXu5GuhR1?lxNPa(PUWNO3QP=-+s&&F(gnx>JDKgoh1jrevn8W(Mn8+baks_lc34a zb{2s0Hlx**p9Z#_&AB9SjeO(LK5r%+wfuG@_oHTJR3UT?Mh5@8jhPwpsoH|NjBTw(gbihwXL4@Z3WjdOx?K%- zx>m5bT7qS%Q)pPaVfzT<>Fydfny_QsKMt%~y?fQ%r4&2v*;L?}T%V z0(d=eimWuz&0e1#pzoE7y$y0kE=9rvw@ZtZ2 z1Ab1CARLhl|6t*%iE?q`cpwcw$R){>4>lkahiLOoa1yJrVF?y8&Dvz5gE|~6#;aU0 z$bntjK+3%EM+Uu+jj|4KsW)lojII|14teA)3Z#R~gp8C8$jKGogJ)qfa$*5Oh|5H? zDrX>C+eqovHugw}8(S%W;vL)KTDwOA8H%-zu)Tyu%nVuUTC_tDI9|fbh=|rYklGX% zG@{W2BH-6IwfeO~_yEGo4JtNXOe~8+VYv(?;s(6aqZBvFa{O5qvtc|;YcwBQ#>P!( zmaKn*_eq(a1;fylMF3oB_cBZvtbyTV1+1FcbEdXtR?wm7`k`Gxr!~jz{;7SB*)Ht{+og3@Rbsn9tAZsAt(S;&%>344QS+BnA>YkA{8* z=P*Nj;WZ#0$%=OkMVw~^5v=$jD9+@!pA{@C{4*?0=SpRI$*fSo-eo6Txe6cm2)j6X zrSXuSlnr7ht)KA96>;V&#^yk#NXQRXE$jD&brjV_}t$K@r&mNxq!%Xt7** zm9SDk&;D%AaQYfjV=$6wpcyAR&_0iyfao9Xk~^KqV*ZFC@ymk1Gl}+^FchQly&iFO z0E@z?JURz}gYlsPBbqDxa$R|LI8++R)37))7b15b)+I_=OETy`O=5>j#{S%5IA(!| zrI2K}2%%K3p(8E5TXwa&twxe96U2Nrv2p-vp2l3jpx9uDU?hE%H#vb*JAmN4z#-Qz z-9~0uD!lae;VTi6mUGRqDdxFRyAv!*rI@9q%OPzwpf>iVmmd}DmRzOn1w)r5Sg{Pv zIVeB-Z#c}6@f^;%@EwR5u@KSD#c+$038Wo}S0}}N8=ts}+HyyaDwRx$qJarv5IO_u zgjyp+TLMSnvIA|-;BzDR;zPrD`l%;);&$-*W*U*w<_!0QT122^-EfhXAq;k~YOxv> z<1*F{UCNc=qZx((xI$bJ2u80-zyWp@jFm{CQ>M+x!3(I|ea0Ms(E@=Zb9^0xEG<2U zzKKs*)s3=M!H!fD$2&F8!c1cQMO-@Mtd=z~IrED}g+W(QxJnKSq+ zLPF;BX^@1d7@mkwGbE`9qBiz7s*wA(hf{@xZau7e&8CJ*Oc#y3Ar=Gk1{Rh4^`6i% z@trG)>7C~;Y`+V8z3py0tYy3cgzb3M!_D+CM9v>=e!%<|@vxsdqY=Q7Az=Af~P1B&? zqrn37v;Zv$A^8zHLGMf-*$hH0)uwdwu_fc$($&YGzINYzl0r4u#ge*vJI&txKYOYl z37@4xk4l2^+Fo4$NED<1yk8fPMb*oxbC;=~Q|BH$b$;p8x$_Jq=>(al1(~PLoyC8y z6FgZQV2=uqNL#RdRCTAZF32j(6+!ET5IkpqV`JS2lI;@_oXl>UDNI7;ZQF z4ot}PXJ2Z-fyvilRe2vs`;?AaHe;JdeJLs32pU{U7w!=87E!)4oH=1rkz$@X1KSbu zjy6WcVT<1uyM2qaeohlBR!calMI*bUqRA91CQ75Q?BW!%VO}&=q2CK@QV&T*sbB7r zCh~cwTSSN!3Q-g4gP^Ht-wtj*j)52uY=w@MeG&@t2z+`=tTF8A5xjo08znLUXX;1L_`?ZKEZiG$`}bP ul&l21$jGFj&Csy9Jeta={4Sn2U*5lL$nEpKdfN?h+vk1NVG>2P%Krl%?}D}f literal 21015 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 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 8bc0193ab9751154e69c1f74c4c0fe3eabeb6907..90847c8a18699a0ac9c1fb3e96640bf67d7d91f6 100644 GIT binary patch delta 954 zcmah{O=}ZT6zwyaOp`P<##mygG)41aAtg#`(+DcKECe@d7cF!$^U9rk%!JHL67hpp zDYh^c>U%Ck&CZo*D_OY^5iG9V_ygRl2nBH=_$FygOiJBcxaZw-?>YCrH<9fyw`_m( z+_%ZSa-~9vv*~0iJ(VDJR3%BY*abD}=q8$rT*n1bE#i=_h6JgC%etx-w5S%6RM9A6 zMHh5gRmLgs3lzL&Y~S)P%a3~rnY<{J ztnSowURD*I4b#$;e70XWY`V%qwfzcLiJueZ!qt}2xUR-KO5Seg7;p;iccJ$zG+?1CtmaNKG_nGWSmXfP0NX+go{?`A05~_nl;ol;7^YJZiderW` H?@h}%M?pdAcOxl4lJUOB2qCsb9 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 W`b0UbGOuxu?iWQWPS@V7x%6M(>9Mi^ diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eadd77d416c9ef22685a1ce5f5e3066c54818b33 GIT binary patch literal 2585 zcmZ8jO>Y}F5Or+p%eG|4X?jRvq(u?babYV3dI)+c3bef#&?zo*2?%OQiG+8_Ek7*z zkfJ>_hymWp{@*_CuGW$TEVLXBXE<-(%R^3(b7a?S-+p?2F57KSg-`Oc$m0imky=BNPs8DWqCn zP{tbgdroK0@O8*)U2%e_#7hA7HJ)$qyu$M>o@b%g_(imU$;c|k)5!*&pW-BREO)+) zpCS(jQf0Ykd?s;U#CGJ0VS*_gQz|vQ3<&vyZ|k^Cq#8v@ASWNoqER zK45lI%~4H{+wz(jtsDmlLicx?dw{;GFEN^g!JI2@sM7{%8ZZhLJ6e=j?ALAxY+qx! z*DSrsu^Iw5lGvMe;jWX?e;dQ`OlzmK<7=CjkHRpOD$+!jGi{0p$;g5(B>_WI$y=Cw zUQ2k+D+yUhC&;RX;ITQ-6xAdg7+z}QNX~C~9xu1Uo}hWV?1aaBDS?%v&fAqzCv+H} z`Z?T<7St$U1r5V#0m;A_n(-7={2WG7mEIAqGR>eB!@#@Q`P*|V@&00SlW=3SA%ZHF zgF;9gV#{0%huXVME1k+p3?~nE9+(h+hEZ+w{sNt=cfXy#h4amg2PeZ(3cvy-0eo@< z6vHs5YVPTr18#=(HtHxmF+9_T5fmNB0XM05C!w2ZHA9SmLo!mLImu-d-7uowX>unAIUWRBcO zD{Fop5+*I3<|&Zomc3Oqh_i5jU@Z7go8B>O)X1vWgi*;$f|$@PR93}%kR($I*NNES zE8$#ee;kh&i^WBG>x5Pp+RVp{-;AMY$1yxjCz8c`Yz|krA&r&z+hZC@=AZ=l_*C)12>AeeIR=1G~b0S3! z(k6@;SiFw`+AdLbNA^}Zx+Fr*MUDp?-OY8P_kk@ais=uJ+O;_Oq*~WYlIx77ZaoPn znV_f=q_-|9BrNqFg2UHn@ORZ%uUc?Z>gd<#L{iO==~e9?r*2^VbW`t$ql+_?<1JhX z&K;~h&2mkz2`{M331*ey)kOUqcDTAp8v`m4ypoDZFx?SH z4V0^C{20E$6Nk?apoLMC26s5#kk&IAVpyBCi*Bk1jCaU;Nm##&_u|TiK@zyz5;%Q~ z;{C*mm-xRD`!)>MlUJP{W)h7lxrfDCk_v34S6_2oQtRPU0x2w}I&b+w3w+F)Dd8{+*|T%}}>rN-0L KXc~rodhtJ}S^`!8 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/kw_test.doctree b/docs/_build/doctrees/setup.doctree similarity index 53% rename from docs/_build/doctrees/kw_test.doctree rename to docs/_build/doctrees/setup.doctree index ea0f2f6720adb7f6a9ac4070632d66e05252631d..f9cadde226f3151ddd4a139584c072641d80275d 100644 GIT binary patch delta 341 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 Bi|POX diff --git a/docs/_build/doctrees/user_reference.doctree b/docs/_build/doctrees/user_reference.doctree deleted file mode 100644 index f40107f7dde2dca081631d33a089c0173f6bbc7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32993 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 OX!?a1&G}cx-Twg*AXoDM diff --git a/docs/_build/html/.doctrees/index.doctree b/docs/_build/html/.doctrees/index.doctree deleted file mode 100644 index d45c4e27f91377e2317221109b6b1d2b66b915f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4784 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 ajNt?vtxZXiGX9xS1dvvi`XON)^nU?8^~enX diff --git a/docs/_build/html/_images/textad_diagram.png b/docs/_build/html/_images/textad_diagram.png deleted file mode 100644 index 27c4e9b797cf51821acd352ebfa206c6d0cbeb57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36566 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 diff --git a/docs/_build/html/_modules/advertools/ad_create.html b/docs/_build/html/_modules/advertools/ad_create.html index 3ce68df2..1f9056e3 100644 --- a/docs/_build/html/_modules/advertools/ad_create.html +++ b/docs/_build/html/_modules/advertools/ad_create.html @@ -39,7 +39,7 @@

Source code for advertools.ad_create

-
[docs]def ad_create(template, replacements, fallback, max_len=30): +
[docs]def ad_create(template, replacements, fallback, max_len=30): """Insert each of the replacement strings in its place within template Parameters @@ -91,13 +91,6 @@

advertools

Navigation

-

Related Topics

diff --git a/docs/_build/html/_modules/advertools/ad_from_string.html b/docs/_build/html/_modules/advertools/ad_from_string.html index c6b4f66d..619d272c 100644 --- a/docs/_build/html/_modules/advertools/ad_from_string.html +++ b/docs/_build/html/_modules/advertools/ad_from_string.html @@ -40,7 +40,7 @@

Source code for advertools.ad_from_string

 import string
-
[docs]def ad_from_string(s, slots=(30, 30, 80, 15, 15), sep=None, capitalize=False): +
[docs]def ad_from_string(s, slots=(30, 30, 80, 15, 15), sep=None, capitalize=False): """Convert string `s` to an ad by splitting it into groups of words. Each group would have a length of at most the allowed length for that slot. @@ -101,13 +101,6 @@

advertools

Navigation

-

Related Topics

diff --git a/docs/_build/html/_modules/advertools/kw_generate.html b/docs/_build/html/_modules/advertools/kw_generate.html index bcad9c63..1cc143c2 100644 --- a/docs/_build/html/_modules/advertools/kw_generate.html +++ b/docs/_build/html/_modules/advertools/kw_generate.html @@ -44,7 +44,7 @@

Source code for advertools.kw_generate

 
 import pandas as pd
 
-
[docs]def kw_generate(products, words, max_len=3, match_types=['Exact', 'Phrase', 'Modified'], +
[docs]def kw_generate(products, words, max_len=3, match_types=['Exact', 'Phrase', 'Modified'], campaign_name='SEM_Campaign'): """Generate a data frame of kewywords using a list of products and relevant words. @@ -126,13 +126,6 @@

advertools

Navigation

-

Related Topics

diff --git a/docs/_build/html/_modules/advertools/url_builders.html b/docs/_build/html/_modules/advertools/url_builders.html index 308884f2..e32e8a5a 100644 --- a/docs/_build/html/_modules/advertools/url_builders.html +++ b/docs/_build/html/_modules/advertools/url_builders.html @@ -42,7 +42,7 @@

Source code for advertools.url_builders

 import urllib
 
 
-
[docs]def url_utm_ga(url, utm_source, utm_medium=None, utm_campaign=None, +
[docs]def url_utm_ga(url, utm_source, utm_medium=None, utm_campaign=None, utm_content=None, utm_term=None): """Generate a utm-encoded URL for your campaigns. @@ -88,13 +88,6 @@

advertools

Navigation

-

Related Topics

diff --git a/docs/_build/html/_modules/advertools/word_frequency.html b/docs/_build/html/_modules/advertools/word_frequency.html new file mode 100644 index 00000000..9515552c --- /dev/null +++ b/docs/_build/html/_modules/advertools/word_frequency.html @@ -0,0 +1,127 @@ + + + + + + + advertools.word_frequency — advertools 0.1a1 documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for advertools.word_frequency

+from collections import defaultdict
+
+import advertools as adv
+import pandas as pd
+
+
+
[docs]def word_frequency(text_list, num_list, sep=None, rm_words=adv.stopwords['english']): + word_freq = defaultdict(lambda: [0, 0]) + + for text, num in zip(text_list, num_list): + for word in text.split(sep=sep): + if word.lower() in rm_words: + continue + word_freq[word.lower()][0] += 1 + word_freq[word.lower()][1] += num + + columns = {0: 'abs_freq', 1: 'wtd_freq'} + + abs_wtd_df = (pd.DataFrame.from_dict(word_freq, orient='index') + .rename(columns=columns ) + .sort_values('wtd_freq', ascending=False) + .assign(rel_value=lambda df: df['wtd_freq'] / df['abs_freq']).round()) + + abs_wtd_df.insert(1, 'abs_perc', value=abs_wtd_df['abs_freq'] / abs_wtd_df['abs_freq'].sum()) + abs_wtd_df.insert(2, 'abs_perc_cum', abs_wtd_df['abs_perc'].cumsum()) + abs_wtd_df.insert(4, 'wtd_freq_perc', abs_wtd_df['wtd_freq'] / abs_wtd_df['wtd_freq'].sum()) + abs_wtd_df.insert(5, 'wtd_freq_perc_cum', abs_wtd_df['wtd_freq_perc'].cumsum()) + + abs_wtd_df = abs_wtd_df.reset_index().rename(columns={'index': 'word'}) + + return abs_wtd_df
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html index c5241c9b..1a01d12d 100644 --- a/docs/_build/html/_modules/index.html +++ b/docs/_build/html/_modules/index.html @@ -43,6 +43,7 @@

All modules for which code is available

  • advertools.ad_from_string
  • advertools.kw_generate
  • advertools.url_builders
  • +
  • advertools.word_frequency
  • @@ -60,13 +61,6 @@

    advertools

    Navigation

    -

    Related Topics

    diff --git a/docs/_build/html/_sources/ad_create.ipynb.txt b/docs/_build/html/_sources/ad_create.ipynb.txt deleted file mode 100644 index 2c2a9e26..00000000 --- a/docs/_build/html/_sources/ad_create.ipynb.txt +++ /dev/null @@ -1,621 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Create Text Ads From Scratch\n", - "\n", - "### Generate multiple ads by dynamically inserting words into their proper place in the text ads\n", - "\n", - "We will use Python's string formatting capabilities to dynamically generate multiple ads for large-scale campaigns. \n", - "\n", - "Online text ads usually consist of a few slots. For exmaple, the expanded text ads of Google AdWords and Bing Ads consist of the following slots:\n", - "\n", - "\n", - "\n", - "\n", - "![](textad_diagram.png) \n", - "Here is an actual ad:\n", - "\n", - "![](text_ad_screen_shot.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lengths of the slots should be at most a certain given length. \n", - "Typically, you would want to create multiple ads, for multiple products, using the same template, but changing a word or a phrase within the ad.\n", - "\n", - "Here is an example for one ad slot: \n", - "**Template:** 'Learn { } interactively' \n", - "**Maximum length:** 35 \n", - "**Replacements:** 'graphic design', 'visual arts', 'fundamentals of user experience' \n", - "**Fallback:** 'graphic arts' (what to put in the braces if the total lengh is greater than the maximum allowed length) \n", - "\n", - "Running the function on each of the above replacements should return the following:\n", - "\n", - "Learn _graphic design_ interactively ('graphic design') \n", - "Learn _visual arts_ interactively ('visual arts') \n", - "Learn _graphic arts_ interactively ('fundamentals of user experience') \n", - "\n", - "Errors to check for: \n", - "* Make sure the length of the `template` together with the `fallback` string is at most the maximum length. \n", - "* Make sure the same is true for each of the given `replacements` strings, otherwise insert the fallback. \n", - "\n", - "Another example, with code:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Exception reporting mode: Plain\n" - ] - } - ], - "source": [ - "%xmode plain \n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "template = 'Get the Latest {}'\n", - "fallback = 'Mobile'\n", - "replacements = ['iPhone', 'Sony XZ', 'Samsung', 'sony xperia xz premium']\n", - "max_len = 25" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "ad_list = []\n", - "if len(template.format(fallback)) > max_len:\n", - " raise ValueError\n", - "for r in replacements:\n", - " if len(template.format(r)) <= max_len:\n", - " ad_list.append(template.format(r))\n", - " else:\n", - " ad_list.append(template.format(fallback))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Get the Latest iPhone',\n", - " 'Get the Latest Sony XZ',\n", - " 'Get the Latest Samsung',\n", - " 'Get the Latest Mobile']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ad_list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The last one was longer than `max_len` and so 'Mobile' was inserted instead of 'sony xperia xz premium'.\n", - "\n", - "Putting it in a function:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def ad_create(template, replacements, fallback, max_len=20):\n", - " if len(template.format(fallback)) > max_len:\n", - " raise ValueError('template + fallback should be <= 20 chars')\n", - " final_ad = []\n", - " for rep in replacements:\n", - " if len(template.format(rep)) <= max_len:\n", - " final_ad.append(template.format(rep))\n", - " else:\n", - " final_ad.append(template.format(fallback))\n", - " return final_ad" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['My Car is a BMW', 'My Car is a Mercedes', 'My Car is a Beauty']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], 'Beauty', 20)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "template + fallback should be <= 20 chars", - "output_type": "error", - "traceback": [ - "Traceback \u001b[0;36m(most recent call last)\u001b[0m:\n", - " File \u001b[1;32m\"\"\u001b[0m, line \u001b[1;32m3\u001b[0m, in \u001b[1;35m\u001b[0m\n 'Beauty Beauty Beauty Beauty ', 20)\n", - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0;36m, in \u001b[0;35mad_create\u001b[0;36m\u001b[0m\n\u001b[0;31m raise ValueError('template + fallback should be <= 20 chars')\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m\u001b[0;31m:\u001b[0m template + fallback should be <= 20 chars\n" - ] - } - ], - "source": [ - "# this should raise an exception\n", - "ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], \n", - " 'Beauty Beauty Beauty Beauty ', 20)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It raises a `ValueError` as it should. \n", - "Now we want to create a set of ads for a travel website. \n", - "As a reminder the default template we will be using is the expanded text ads used by Google AdWords and BingAds, which is: \n", - "\n", - "\n", - "|Ad Slot | Maximum Length |\n", - "|-----------|-------------------|\n", - "|Headline 1 | 30 |\n", - "|Headline 2 | 30 |\n", - "|Description| 80 |\n", - "|Path1 | 15 |\n", - "|Path2 | 15 |\n", - "|Final URL | 1024 |\n", - "\n", - "\n", - "Templates we are going to use: \n", - "\n", - "Ad Slot| Maximum Length\n", - "-------|-------------------\n", - "Headline 1| Trips to {destination}\n", - "Headline 2| Prices Starting at ${price}\n", - "Description| Enjoy {destination} and Other Great Cities. Browse the Different Options Now.\n", - "Path1| {destination}\n", - "Path2| {country}\n", - "Final URL| http://www.mysite.com/trips/destinations/{destination}\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "destinations = ['Rio de Janeiro', 'New York', 'Paris', 'Rome', \n", - " 'Madrid', 'Istanbul', 'Dubai', 'Los Angeles']\n", - "countries = ['Brazil', 'USA', 'France', 'Italy', 'Spain', \n", - " 'Turkey', 'UAE', 'USA']\n", - "prices = [500, 700, 600, 800, 400, 500, 800, 500]\n", - "\n", - "templates = {\n", - "'Headline 1': 'Trips to {}',\n", - "'Headline 2': 'Prices Starting at ${}',\n", - "'Description': 'Enjoy {} and Other Great Cities. Browse the Different Options. Start Now',\n", - "'Path1': '{}',\n", - "'Path2': '{}',\n", - "'Final URL': 'http://www.mysite.com/trips/destinations/{}',\n", - "}\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Trips to Rio de Janeiro',\n", - " 'Trips to New York',\n", - " 'Trips to Paris',\n", - " 'Trips to Rome',\n", - " 'Trips to Madrid',\n", - " 'Trips to Istanbul',\n", - " 'Trips to Dubai',\n", - " 'Trips to Los Angeles']" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "h1 = ad_create(template=templates['Headline 1'], \n", - " replacements=destinations, \n", - " fallback='Great Cities',\n", - " max_len=30)\n", - "h1" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Prices Starting at $500',\n", - " 'Prices Starting at $700',\n", - " 'Prices Starting at $600',\n", - " 'Prices Starting at $800',\n", - " 'Prices Starting at $400',\n", - " 'Prices Starting at $500',\n", - " 'Prices Starting at $800',\n", - " 'Prices Starting at $500']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "h2 = ad_create(templates['Headline 2'], prices, '350', 30)\n", - "h2" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Enjoy This and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy New York and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy Paris and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy Rome and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy Madrid and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy Istanbul and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy Dubai and Other Great Cities. Browse the Different Options. Start Now',\n", - " 'Enjoy This and Other Great Cities. Browse the Different Options. Start Now']" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "desc = ad_create(templates['Description'], destinations, 'This', 80)\n", - "desc" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Rio de Janeiro',\n", - " 'New York',\n", - " 'Paris',\n", - " 'Rome',\n", - " 'Madrid',\n", - " 'Istanbul',\n", - " 'Dubai',\n", - " 'Los Angeles']" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "path1 = ad_create(templates['Path1'], destinations, '', 15)\n", - "path1" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Brazil', 'USA', 'France', 'Italy', 'Spain', 'Turkey', 'UAE', 'USA']" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "path2 = ad_create(templates['Path2'], countries, '', 15)\n", - "path2" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['http://www.mysite.com/trips/destinations/Rio de Janeiro',\n", - " 'http://www.mysite.com/trips/destinations/New York',\n", - " 'http://www.mysite.com/trips/destinations/Paris',\n", - " 'http://www.mysite.com/trips/destinations/Rome',\n", - " 'http://www.mysite.com/trips/destinations/Madrid',\n", - " 'http://www.mysite.com/trips/destinations/Istanbul',\n", - " 'http://www.mysite.com/trips/destinations/Dubai',\n", - " 'http://www.mysite.com/trips/destinations/Los Angeles']" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "final_url = ad_create(templates['Final URL'], destinations, '', 1024)\n", - "final_url" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We simply put them together in a DataFrame, together with the Campaign and Ad Group names based on the destinations (products) that we have. " - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    CampaignAd GroupHeadline 1Headline 2DescriptionPath 1Path 2
    0SEM_DestinationsRio de JaneiroTrips to Rio de JaneiroPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Rio de JaneiroBrazil
    1SEM_DestinationsNew YorkTrips to New YorkPrices Starting at $700Enjoy New York and Other Great Cities. Browse ...New YorkUSA
    2SEM_DestinationsParisTrips to ParisPrices Starting at $600Enjoy Paris and Other Great Cities. Browse the...ParisFrance
    3SEM_DestinationsRomeTrips to RomePrices Starting at $800Enjoy Rome and Other Great Cities. Browse the ...RomeItaly
    4SEM_DestinationsMadridTrips to MadridPrices Starting at $400Enjoy Madrid and Other Great Cities. Browse th...MadridSpain
    5SEM_DestinationsIstanbulTrips to IstanbulPrices Starting at $500Enjoy Istanbul and Other Great Cities. Browse ...IstanbulTurkey
    6SEM_DestinationsDubaiTrips to DubaiPrices Starting at $800Enjoy Dubai and Other Great Cities. Browse the...DubaiUAE
    7SEM_DestinationsLos AngelesTrips to Los AngelesPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Los AngelesUSA
    \n", - "
    " - ], - "text/plain": [ - " Campaign Ad Group Headline 1 \\\n", - "0 SEM_Destinations Rio de Janeiro Trips to Rio de Janeiro \n", - "1 SEM_Destinations New York Trips to New York \n", - "2 SEM_Destinations Paris Trips to Paris \n", - "3 SEM_Destinations Rome Trips to Rome \n", - "4 SEM_Destinations Madrid Trips to Madrid \n", - "5 SEM_Destinations Istanbul Trips to Istanbul \n", - "6 SEM_Destinations Dubai Trips to Dubai \n", - "7 SEM_Destinations Los Angeles Trips to Los Angeles \n", - "\n", - " Headline 2 Description \\\n", - "0 Prices Starting at $500 Enjoy This and Other Great Cities. Browse the ... \n", - "1 Prices Starting at $700 Enjoy New York and Other Great Cities. Browse ... \n", - "2 Prices Starting at $600 Enjoy Paris and Other Great Cities. Browse the... \n", - "3 Prices Starting at $800 Enjoy Rome and Other Great Cities. Browse the ... \n", - "4 Prices Starting at $400 Enjoy Madrid and Other Great Cities. Browse th... \n", - "5 Prices Starting at $500 Enjoy Istanbul and Other Great Cities. Browse ... \n", - "6 Prices Starting at $800 Enjoy Dubai and Other Great Cities. Browse the... \n", - "7 Prices Starting at $500 Enjoy This and Other Great Cities. Browse the ... \n", - "\n", - " Path 1 Path 2 \n", - "0 Rio de Janeiro Brazil \n", - "1 New York USA \n", - "2 Paris France \n", - "3 Rome Italy \n", - "4 Madrid Spain \n", - "5 Istanbul Turkey \n", - "6 Dubai UAE \n", - "7 Los Angeles USA " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ads_df = pd.DataFrame({\n", - " 'Campaign': 'SEM_Destinations',\n", - " 'Ad Group': destinations,\n", - " 'Headline 1': h1,\n", - " 'Headline 2': h2,\n", - " 'Description': desc,\n", - " 'Path 1': path1,\n", - " 'Path 2': path2,\n", - " 'Final URL': final_url\n", - "})\n", - "ads_df = ads_df[['Campaign', 'Ad Group', 'Headline 1', 'Headline 2', \n", - " 'Description', 'Path 1', 'Path 2']]\n", - "ads_df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This now ready for uploading, and launching. \n", - "Of course the other big part of the account is the keywords, which also need to be generated. \n", - "\n", - "I'll cover these in another notebook. \n", - "\n", - "The function `ad_create` is now part of the [advertools](https://www.github.com/eliasdabbas/advertools) package, so you can test it! " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_build/html/_sources/ad_create.md.txt b/docs/_build/html/_sources/ad_create.md.txt deleted file mode 100644 index a2bd9773..00000000 --- a/docs/_build/html/_sources/ad_create.md.txt +++ /dev/null @@ -1,440 +0,0 @@ - -# Create Text Ads From Scratch - -### Generate multiple ads by dynamically inserting words into their proper place in the text ads - -We will use Python's string formatting capabilities to dynamically generate multiple ads for large-scale campaigns. - -Online text ads usually consist of a few slots. For exmaple, the expanded text ads of Google AdWords and Bing Ads consist of the following slots: - - - - -![](textad_diagram.png) -Here is an actual ad: - -![](text_ad_screen_shot.png) - -Lengths of the slots should be at most a certain given length. -Typically, you would want to create multiple ads, for multiple products, using the same template, but changing a word or a phrase within the ad. - -Here is an example for one ad slot: -**Template:** 'Learn { } interactively' -**Maximum length:** 35 -**Replacements:** 'graphic design', 'visual arts', 'fundamentals of user experience' -**Fallback:** 'graphic arts' (what to put in the braces if the total lengh is greater than the maximum allowed length) - -Running the function on each of the above replacements should return the following: - -Learn _graphic design_ interactively ('graphic design') -Learn _visual arts_ interactively ('visual arts') -Learn _graphic arts_ interactively ('fundamentals of user experience') - -Errors to check for: -* Make sure the length of the `template` together with the `fallback` string is at most the maximum length. -* Make sure the same is true for each of the given `replacements` strings, otherwise insert the fallback. - -Another example, with code: - - -```python -%xmode plain -import pandas as pd -``` - - Exception reporting mode: Plain - - - -```python -template = 'Get the Latest {}' -fallback = 'Mobile' -replacements = ['iPhone', 'Sony XZ', 'Samsung', 'sony xperia xz premium'] -max_len = 25 -``` - - -```python -ad_list = [] -if len(template.format(fallback)) > max_len: - raise ValueError -for r in replacements: - if len(template.format(r)) <= max_len: - ad_list.append(template.format(r)) - else: - ad_list.append(template.format(fallback)) -``` - - -```python -ad_list -``` - - - - - ['Get the Latest iPhone', - 'Get the Latest Sony XZ', - 'Get the Latest Samsung', - 'Get the Latest Mobile'] - - - -The last one was longer than `max_len` and so 'Mobile' was inserted instead of 'sony xperia xz premium'. - -Putting it in a function: - - -```python -def ad_create(template, replacements, fallback, max_len=20): - if len(template.format(fallback)) > max_len: - raise ValueError('template + fallback should be <= 20 chars') - final_ad = [] - for rep in replacements: - if len(template.format(rep)) <= max_len: - final_ad.append(template.format(rep)) - else: - final_ad.append(template.format(fallback)) - return final_ad -``` - - -```python -ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], 'Beauty', 20) -``` - - - - - ['My Car is a BMW', 'My Car is a Mercedes', 'My Car is a Beauty'] - - - - -```python -# this should raise an exception -ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], - 'Beauty Beauty Beauty Beauty ', 20) -``` - - - Traceback (most recent call last): - - - File "", line 3, in - 'Beauty Beauty Beauty Beauty ', 20) - - - File "", line 3, in ad_create - raise ValueError('template + fallback should be <= 20 chars') - - - ValueError: template + fallback should be <= 20 chars - - - -It raises a `ValueError` as it should. -Now we want to create a set of ads for a travel website. -As a reminder the default template we will be using is the expanded text ads used by Google AdWords and BingAds, which is: - - -|Ad Slot | Maximum Length | -|-----------|-------------------| -|Headline 1 | 30 | -|Headline 2 | 30 | -|Description| 80 | -|Path1 | 15 | -|Path2 | 15 | -|Final URL | 1024 | - - -Templates we are going to use: - -Ad Slot| Maximum Length --------|------------------- -Headline 1| Trips to {destination} -Headline 2| Prices Starting at ${price} -Description| Enjoy {destination} and Other Great Cities. Browse the Different Options Now. -Path1| {destination} -Path2| {country} -Final URL| http://www.mysite.com/trips/destinations/{destination} - - - - -```python -destinations = ['Rio de Janeiro', 'New York', 'Paris', 'Rome', - 'Madrid', 'Istanbul', 'Dubai', 'Los Angeles'] -countries = ['Brazil', 'USA', 'France', 'Italy', 'Spain', - 'Turkey', 'UAE', 'USA'] -prices = [500, 700, 600, 800, 400, 500, 800, 500] - -templates = { -'Headline 1': 'Trips to {}', -'Headline 2': 'Prices Starting at ${}', -'Description': 'Enjoy {} and Other Great Cities. Browse the Different Options. Start Now', -'Path1': '{}', -'Path2': '{}', -'Final URL': 'http://www.mysite.com/trips/destinations/{}', -} - -``` - - -```python -h1 = ad_create(template=templates['Headline 1'], - replacements=destinations, - fallback='Great Cities', - max_len=30) -h1 -``` - - - - - ['Trips to Rio de Janeiro', - 'Trips to New York', - 'Trips to Paris', - 'Trips to Rome', - 'Trips to Madrid', - 'Trips to Istanbul', - 'Trips to Dubai', - 'Trips to Los Angeles'] - - - - -```python -h2 = ad_create(templates['Headline 2'], prices, '350', 30) -h2 -``` - - - - - ['Prices Starting at $500', - 'Prices Starting at $700', - 'Prices Starting at $600', - 'Prices Starting at $800', - 'Prices Starting at $400', - 'Prices Starting at $500', - 'Prices Starting at $800', - 'Prices Starting at $500'] - - - - -```python -desc = ad_create(templates['Description'], destinations, 'This', 80) -desc -``` - - - - - ['Enjoy This and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy New York and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Paris and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Rome and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Madrid and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Istanbul and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Dubai and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy This and Other Great Cities. Browse the Different Options. Start Now'] - - - - -```python -path1 = ad_create(templates['Path1'], destinations, '', 15) -path1 -``` - - - - - ['Rio de Janeiro', - 'New York', - 'Paris', - 'Rome', - 'Madrid', - 'Istanbul', - 'Dubai', - 'Los Angeles'] - - - - -```python -path2 = ad_create(templates['Path2'], countries, '', 15) -path2 -``` - - - - - ['Brazil', 'USA', 'France', 'Italy', 'Spain', 'Turkey', 'UAE', 'USA'] - - - - -```python -final_url = ad_create(templates['Final URL'], destinations, '', 1024) -final_url -``` - - - - - ['http://www.mysite.com/trips/destinations/Rio de Janeiro', - 'http://www.mysite.com/trips/destinations/New York', - 'http://www.mysite.com/trips/destinations/Paris', - 'http://www.mysite.com/trips/destinations/Rome', - 'http://www.mysite.com/trips/destinations/Madrid', - 'http://www.mysite.com/trips/destinations/Istanbul', - 'http://www.mysite.com/trips/destinations/Dubai', - 'http://www.mysite.com/trips/destinations/Los Angeles'] - - - -We simply put them together in a DataFrame, together with the Campaign and Ad Group names based on the destinations (products) that we have. - - -```python -ads_df = pd.DataFrame({ - 'Campaign': 'SEM_Destinations', - 'Ad Group': destinations, - 'Headline 1': h1, - 'Headline 2': h2, - 'Description': desc, - 'Path 1': path1, - 'Path 2': path2, - 'Final URL': final_url -}) -ads_df = ads_df[['Campaign', 'Ad Group', 'Headline 1', 'Headline 2', - 'Description', 'Path 1', 'Path 2']] -ads_df -``` - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CampaignAd GroupHeadline 1Headline 2DescriptionPath 1Path 2
    0SEM_DestinationsRio de JaneiroTrips to Rio de JaneiroPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Rio de JaneiroBrazil
    1SEM_DestinationsNew YorkTrips to New YorkPrices Starting at $700Enjoy New York and Other Great Cities. Browse ...New YorkUSA
    2SEM_DestinationsParisTrips to ParisPrices Starting at $600Enjoy Paris and Other Great Cities. Browse the...ParisFrance
    3SEM_DestinationsRomeTrips to RomePrices Starting at $800Enjoy Rome and Other Great Cities. Browse the ...RomeItaly
    4SEM_DestinationsMadridTrips to MadridPrices Starting at $400Enjoy Madrid and Other Great Cities. Browse th...MadridSpain
    5SEM_DestinationsIstanbulTrips to IstanbulPrices Starting at $500Enjoy Istanbul and Other Great Cities. Browse ...IstanbulTurkey
    6SEM_DestinationsDubaiTrips to DubaiPrices Starting at $800Enjoy Dubai and Other Great Cities. Browse the...DubaiUAE
    7SEM_DestinationsLos AngelesTrips to Los AngelesPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Los AngelesUSA
    -
    - - - -This now ready for uploading, and launching. -Of course the other big part of the account is the keywords, which also need to be generated. - -I'll cover these in another notebook. - -The function `ad_create` is now part of the [advertools](https://www.github.com/eliasdabbas/advertools) package, so you can test it! diff --git a/docs/_build/html/_sources/ad_create.rst.txt b/docs/_build/html/_sources/ad_create.rst.txt deleted file mode 100644 index 9d6ca0c7..00000000 --- a/docs/_build/html/_sources/ad_create.rst.txt +++ /dev/null @@ -1,483 +0,0 @@ - -Create Text Ads From Scratch -============================ - -Generate multiple ads by dynamically inserting words into their proper place in the text ads -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We will use Python's string formatting capabilities to dynamically -generate multiple ads for large-scale campaigns. - -Online text ads usually consist of a few slots. For exmaple, the -expanded text ads of Google AdWords and Bing Ads consist of the -following slots: - -| |image0| -| Here is an actual ad: - -.. figure:: text_ad_screen_shot.png - :alt: - -.. |image0| image:: textad_diagram.png - -Lengths of the slots should be at most a certain given length. -Typically, you would want to create multiple ads, for multiple products, -using the same template, but changing a word or a phrase within the ad. - -| Here is an example for one ad slot: -| **Template:** 'Learn { } interactively' -| **Maximum length:** 35 -| **Replacements:** 'graphic design', 'visual arts', 'fundamentals of - user experience' -| **Fallback:** 'graphic arts' (what to put in the braces if the total - lengh is greater than the maximum allowed length) - -Running the function on each of the above replacements should return the -following: - -| Learn *graphic design* interactively ('graphic design') -| Learn *visual arts* interactively ('visual arts') -| Learn *graphic arts* interactively ('fundamentals of user experience') - -Errors to check for: \* Make sure the length of the ``template`` -together with the ``fallback`` string is at most the maximum length. \* -Make sure the same is true for each of the given ``replacements`` -strings, otherwise insert the fallback. - -Another example, with code: - -.. code:: ipython3 - - %xmode plain - import pandas as pd - - -.. parsed-literal:: - - Exception reporting mode: Plain - - -.. code:: ipython3 - - template = 'Get the Latest {}' - fallback = 'Mobile' - replacements = ['iPhone', 'Sony XZ', 'Samsung', 'sony xperia xz premium'] - max_len = 25 - -.. code:: ipython3 - - ad_list = [] - if len(template.format(fallback)) > max_len: - raise ValueError - for r in replacements: - if len(template.format(r)) <= max_len: - ad_list.append(template.format(r)) - else: - ad_list.append(template.format(fallback)) - -.. code:: ipython3 - - ad_list - - - - -.. parsed-literal:: - - ['Get the Latest iPhone', - 'Get the Latest Sony XZ', - 'Get the Latest Samsung', - 'Get the Latest Mobile'] - - - -The last one was longer than ``max_len`` and so 'Mobile' was inserted -instead of 'sony xperia xz premium'. - -Putting it in a function: - -.. code:: ipython3 - - def ad_create(template, replacements, fallback, max_len=20): - if len(template.format(fallback)) > max_len: - raise ValueError('template + fallback should be <= 20 chars') - final_ad = [] - for rep in replacements: - if len(template.format(rep)) <= max_len: - final_ad.append(template.format(rep)) - else: - final_ad.append(template.format(fallback)) - return final_ad - -.. code:: ipython3 - - ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], 'Beauty', 20) - - - - -.. parsed-literal:: - - ['My Car is a BMW', 'My Car is a Mercedes', 'My Car is a Beauty'] - - - -.. code:: ipython3 - - # this should raise an exception - ad_create('My Car is a {}', ['BMW', 'Mercedes', 'Lamborghini'], - 'Beauty Beauty Beauty Beauty ', 20) - - -:: - - - Traceback (most recent call last): - - - File "", line 3, in - 'Beauty Beauty Beauty Beauty ', 20) - - - File "", line 3, in ad_create - raise ValueError('template + fallback should be <= 20 chars') - - - ValueError: template + fallback should be <= 20 chars - - - -| It raises a ``ValueError`` as it should. Now we want to create a set - of ads for a travel website. -| As a reminder the default template we will be using is the expanded - text ads used by Google AdWords and BingAds, which is: - -+---------------+------------------+ -| Ad Slot | Maximum Length | -+===============+==================+ -| Headline 1 | 30 | -+---------------+------------------+ -| Headline 2 | 30 | -+---------------+------------------+ -| Description | 80 | -+---------------+------------------+ -| Path1 | 15 | -+---------------+------------------+ -| Path2 | 15 | -+---------------+------------------+ -| Final URL | 1024 | -+---------------+------------------+ - -Templates we are going to use: - -+----------+----------------------+ -| Ad Slot | Maximum Length | -+==========+======================+ -| Headline | Trips to | -| 1 | {destination} | -+----------+----------------------+ -| Headline | Prices Starting at | -| 2 | ${price} | -+----------+----------------------+ -| Descript | Enjoy {destination} | -| ion | and Other Great | -| | Cities. Browse the | -| | Different Options | -| | Now. | -+----------+----------------------+ -| Path1 | {destination} | -+----------+----------------------+ -| Path2 | {country} | -+----------+----------------------+ -| Final | http://www.mysite.co | -| URL | m/trips/destinations | -| | /{destination} | -+----------+----------------------+ - -.. code:: ipython3 - - destinations = ['Rio de Janeiro', 'New York', 'Paris', 'Rome', - 'Madrid', 'Istanbul', 'Dubai', 'Los Angeles'] - countries = ['Brazil', 'USA', 'France', 'Italy', 'Spain', - 'Turkey', 'UAE', 'USA'] - prices = [500, 700, 600, 800, 400, 500, 800, 500] - - templates = { - 'Headline 1': 'Trips to {}', - 'Headline 2': 'Prices Starting at ${}', - 'Description': 'Enjoy {} and Other Great Cities. Browse the Different Options. Start Now', - 'Path1': '{}', - 'Path2': '{}', - 'Final URL': 'http://www.mysite.com/trips/destinations/{}', - } - - -.. code:: ipython3 - - h1 = ad_create(template=templates['Headline 1'], - replacements=destinations, - fallback='Great Cities', - max_len=30) - h1 - - - - -.. parsed-literal:: - - ['Trips to Rio de Janeiro', - 'Trips to New York', - 'Trips to Paris', - 'Trips to Rome', - 'Trips to Madrid', - 'Trips to Istanbul', - 'Trips to Dubai', - 'Trips to Los Angeles'] - - - -.. code:: ipython3 - - h2 = ad_create(templates['Headline 2'], prices, '350', 30) - h2 - - - - -.. parsed-literal:: - - ['Prices Starting at $500', - 'Prices Starting at $700', - 'Prices Starting at $600', - 'Prices Starting at $800', - 'Prices Starting at $400', - 'Prices Starting at $500', - 'Prices Starting at $800', - 'Prices Starting at $500'] - - - -.. code:: ipython3 - - desc = ad_create(templates['Description'], destinations, 'This', 80) - desc - - - - -.. parsed-literal:: - - ['Enjoy This and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy New York and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Paris and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Rome and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Madrid and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Istanbul and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy Dubai and Other Great Cities. Browse the Different Options. Start Now', - 'Enjoy This and Other Great Cities. Browse the Different Options. Start Now'] - - - -.. code:: ipython3 - - path1 = ad_create(templates['Path1'], destinations, '', 15) - path1 - - - - -.. parsed-literal:: - - ['Rio de Janeiro', - 'New York', - 'Paris', - 'Rome', - 'Madrid', - 'Istanbul', - 'Dubai', - 'Los Angeles'] - - - -.. code:: ipython3 - - path2 = ad_create(templates['Path2'], countries, '', 15) - path2 - - - - -.. parsed-literal:: - - ['Brazil', 'USA', 'France', 'Italy', 'Spain', 'Turkey', 'UAE', 'USA'] - - - -.. code:: ipython3 - - final_url = ad_create(templates['Final URL'], destinations, '', 1024) - final_url - - - - -.. parsed-literal:: - - ['http://www.mysite.com/trips/destinations/Rio de Janeiro', - 'http://www.mysite.com/trips/destinations/New York', - 'http://www.mysite.com/trips/destinations/Paris', - 'http://www.mysite.com/trips/destinations/Rome', - 'http://www.mysite.com/trips/destinations/Madrid', - 'http://www.mysite.com/trips/destinations/Istanbul', - 'http://www.mysite.com/trips/destinations/Dubai', - 'http://www.mysite.com/trips/destinations/Los Angeles'] - - - -We simply put them together in a DataFrame, together with the Campaign -and Ad Group names based on the destinations (products) that we have. - -.. code:: ipython3 - - ads_df = pd.DataFrame({ - 'Campaign': 'SEM_Destinations', - 'Ad Group': destinations, - 'Headline 1': h1, - 'Headline 2': h2, - 'Description': desc, - 'Path 1': path1, - 'Path 2': path2, - 'Final URL': final_url - }) - ads_df = ads_df[['Campaign', 'Ad Group', 'Headline 1', 'Headline 2', - 'Description', 'Path 1', 'Path 2']] - ads_df - - - - -.. raw:: html - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CampaignAd GroupHeadline 1Headline 2DescriptionPath 1Path 2
    0SEM_DestinationsRio de JaneiroTrips to Rio de JaneiroPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Rio de JaneiroBrazil
    1SEM_DestinationsNew YorkTrips to New YorkPrices Starting at $700Enjoy New York and Other Great Cities. Browse ...New YorkUSA
    2SEM_DestinationsParisTrips to ParisPrices Starting at $600Enjoy Paris and Other Great Cities. Browse the...ParisFrance
    3SEM_DestinationsRomeTrips to RomePrices Starting at $800Enjoy Rome and Other Great Cities. Browse the ...RomeItaly
    4SEM_DestinationsMadridTrips to MadridPrices Starting at $400Enjoy Madrid and Other Great Cities. Browse th...MadridSpain
    5SEM_DestinationsIstanbulTrips to IstanbulPrices Starting at $500Enjoy Istanbul and Other Great Cities. Browse ...IstanbulTurkey
    6SEM_DestinationsDubaiTrips to DubaiPrices Starting at $800Enjoy Dubai and Other Great Cities. Browse the...DubaiUAE
    7SEM_DestinationsLos AngelesTrips to Los AngelesPrices Starting at $500Enjoy This and Other Great Cities. Browse the ...Los AngelesUSA
    -
    - - - -| This now ready for uploading, and launching. -| Of course the other big part of the account is the keywords, which - also need to be generated. - -I'll cover these in another notebook. - -The function ``ad_create`` is now part of the -`advertools `__ package, -so you can test it! diff --git a/docs/_build/html/_sources/ads.rst.txt b/docs/_build/html/_sources/ads.rst.txt deleted file mode 100644 index f94238d0..00000000 --- a/docs/_build/html/_sources/ads.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -### -Ads -### - - -.. automodule:: advertools.ad_create - :members: - -.. automodule:: advertools.ad_from_string - :members: diff --git a/docs/_build/html/_sources/advertools.ad_create.rst.txt b/docs/_build/html/_sources/advertools.ad_create.rst.txt new file mode 100644 index 00000000..ba0d8dd2 --- /dev/null +++ b/docs/_build/html/_sources/advertools.ad_create.rst.txt @@ -0,0 +1,7 @@ +advertools\.ad\_create module +============================= + +.. automodule:: advertools.ad_create + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.ad_from_string.rst.txt b/docs/_build/html/_sources/advertools.ad_from_string.rst.txt new file mode 100644 index 00000000..fbaf5fda --- /dev/null +++ b/docs/_build/html/_sources/advertools.ad_from_string.rst.txt @@ -0,0 +1,7 @@ +advertools\.ad\_from\_string module +=================================== + +.. automodule:: advertools.ad_from_string + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.kw_generate.rst.txt b/docs/_build/html/_sources/advertools.kw_generate.rst.txt new file mode 100644 index 00000000..11b69b80 --- /dev/null +++ b/docs/_build/html/_sources/advertools.kw_generate.rst.txt @@ -0,0 +1,7 @@ +advertools\.kw\_generate module +=============================== + +.. automodule:: advertools.kw_generate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.rst.txt b/docs/_build/html/_sources/advertools.rst.txt new file mode 100644 index 00000000..1ebfd325 --- /dev/null +++ b/docs/_build/html/_sources/advertools.rst.txt @@ -0,0 +1,22 @@ +advertools package +================== + +Submodules +---------- + +.. toctree:: + + advertools.ad_create + advertools.ad_from_string + advertools.kw_generate + advertools.stopwords + advertools.url_builders + advertools.word_frequency + +Module contents +--------------- + +.. automodule:: advertools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.stopwords.rst.txt b/docs/_build/html/_sources/advertools.stopwords.rst.txt new file mode 100644 index 00000000..9ba272ae --- /dev/null +++ b/docs/_build/html/_sources/advertools.stopwords.rst.txt @@ -0,0 +1,7 @@ +advertools\.stopwords module +============================ + +.. automodule:: advertools.stopwords + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.url_builders.rst.txt b/docs/_build/html/_sources/advertools.url_builders.rst.txt new file mode 100644 index 00000000..86cf36a0 --- /dev/null +++ b/docs/_build/html/_sources/advertools.url_builders.rst.txt @@ -0,0 +1,7 @@ +advertools\.url\_builders module +================================ + +.. automodule:: advertools.url_builders + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/advertools.word_frequency.rst.txt b/docs/_build/html/_sources/advertools.word_frequency.rst.txt new file mode 100644 index 00000000..f7a219a1 --- /dev/null +++ b/docs/_build/html/_sources/advertools.word_frequency.rst.txt @@ -0,0 +1,7 @@ +advertools\.word\_frequency module +================================== + +.. automodule:: advertools.word_frequency + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt index bf16a6f8..6aebcec6 100644 --- a/docs/_build/html/_sources/index.rst.txt +++ b/docs/_build/html/_sources/index.rst.txt @@ -1,29 +1,20 @@ .. advertools documentation master file, created by - sphinx-quickstart on Thu Feb 1 21:13:01 2018. + sphinx-quickstart on Thu Feb 8 02:48:50 2018. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -advertools: Online Marketing Productivity and Analysis Tools -============================================================ +Welcome to advertools's documentation! +====================================== .. toctree:: - :maxdepth: 5 - - keywords - ads - ad_create - word_freq - urls - - - + :maxdepth: 2 + :caption: Contents: Indices and tables ================== - * :ref:`genindex` * :ref:`modindex` * :ref:`search` diff --git a/docs/_build/html/_sources/keywords.rst.txt b/docs/_build/html/_sources/keywords.rst.txt deleted file mode 100644 index 750abec2..00000000 --- a/docs/_build/html/_sources/keywords.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -######## -Keywords -######## - - -.. automodule:: advertools.kw_generate - :members: diff --git a/docs/_build/html/_sources/kw_test.rst.txt b/docs/_build/html/_sources/kw_test.rst.txt deleted file mode 100644 index fa1fa94f..00000000 --- a/docs/_build/html/_sources/kw_test.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -######### -KW Test -######### - - -.. automodule:: advertools.keywords - :members: diff --git a/docs/_build/html/_sources/modules.rst.txt b/docs/_build/html/_sources/modules.rst.txt new file mode 100644 index 00000000..df7308e0 --- /dev/null +++ b/docs/_build/html/_sources/modules.rst.txt @@ -0,0 +1,8 @@ +advertools +========== + +.. toctree:: + :maxdepth: 4 + + advertools + setup diff --git a/docs/_build/html/_sources/setup.rst.txt b/docs/_build/html/_sources/setup.rst.txt new file mode 100644 index 00000000..31789b12 --- /dev/null +++ b/docs/_build/html/_sources/setup.rst.txt @@ -0,0 +1,7 @@ +setup module +============ + +.. automodule:: setup + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/urls.rst.txt b/docs/_build/html/_sources/urls.rst.txt deleted file mode 100644 index a8af842a..00000000 --- a/docs/_build/html/_sources/urls.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -#### -URLs -#### - - -.. automodule:: advertools.url_builders - :members: diff --git a/docs/_build/html/_sources/user_reference.rst.txt b/docs/_build/html/_sources/user_reference.rst.txt deleted file mode 100644 index e97532b8..00000000 --- a/docs/_build/html/_sources/user_reference.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -############## -User Reference -############## - - -.. automodule:: advertools.kw_generate - :members: - -.. automodule:: advertools.ad_from_string - :members: - -.. automodule:: advertools.ad_create - :members: - -.. automodule:: advertools.stopwords - :members: - -.. automodule:: advertools.url_builders - :members: - - - - -#.. automodule:: advertools.kw_test -# :members: - diff --git a/docs/_build/html/_sources/word_freq.rst.txt b/docs/_build/html/_sources/word_freq.rst.txt deleted file mode 100644 index d6307fd5..00000000 --- a/docs/_build/html/_sources/word_freq.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -############## -Word Frequency -############## - - - -.. automodule:: advertools.word_frequency - :members: diff --git a/docs/_build/html/_sources/word_frequency.rst.txt b/docs/_build/html/_sources/word_frequency.rst.txt deleted file mode 100644 index bf70ff17..00000000 --- a/docs/_build/html/_sources/word_frequency.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -############## -Word Frequency -############## - - -hello... wtf??!! - -.. automodule:: advertools.word_frequency - :members: diff --git a/docs/_build/html/_static/jquery-3.1.0.js b/docs/_build/html/_static/jquery-3.1.0.js deleted file mode 100644 index f2fc2747..00000000 --- a/docs/_build/html/_static/jquery-3.1.0.js +++ /dev/null @@ -1,10074 +0,0 @@ -/*eslint-disable no-unused-vars*/ -/*! - * jQuery JavaScript Library v3.1.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-07-07T21:44Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.1.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = jQuery.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.0 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-01-04 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - // Known :disabled false positives: - // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) - // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Check form elements and option elements for explicit disabling - return "label" in elem && elem.disabled === disabled || - "form" in elem && elem.disabled === disabled || - - // Check non-disabled form elements for fieldset[disabled] ancestors - "form" in elem && elem.disabled === false && ( - // Support: IE6-11+ - // Ancestry is covered for us - elem.isDisabled === disabled || - - // Otherwise, assume any non-