Skip to content

Instantly share code, notes, and snippets.

@pshapiro
pshapiro / hitwise-audienceview-keyword-research.py
Created June 20, 2019 19:44
Automate Keyword Profiling with AudienceView - Requires and existing Crosstab Report
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
import time
import pandas as pd
import os
@pshapiro
pshapiro / reddit-keyword-insights.py
Created August 23, 2017 02:41
Get stats from reddit keywords
import praw
import csv
import datetime
# Create an app: https://www.reddit.com/prefs/apps
# Use http://localhost:8080 as redirect uri
username = ""
password = ""
clientid = ""
clientsecret = ""
@pshapiro
pshapiro / index.js
Created November 28, 2017 06:46
Puppeteer Crawler Example
var Walker = require('puppeteer-walker')
var fs = require('fs')
var walker = Walker()
fs.writeFile('output.csv', 'URL, Title, H2\r\n', 'utf8', function (err) {
console.log(`Header written`)
})
walker.on('end', () => console.log('finished walking'))
@pshapiro
pshapiro / mailchimp-post.php
Created May 11, 2017 15:27
amp-form implementation of a MailChimp / Email Subscribe post handler.
<?php
if (!empty($_POST)) {
header("access-control-allow-credentials:true");
header("access-control-allow-headers:Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token");
header("access-control-allow-methods:POST, GET, OPTIONS");
header("access-control-allow-origin:".$_SERVER['HTTP_ORIGIN']);
header("access-control-expose-headers:AMP-Access-Control-Allow-Source-Origin");
// change to represent your site's protocol, either http or https
header("amp-access-control-allow-source-origin:https://".$_SERVER['HTTP_HOST']);
header("Content-Type: application/json");
@pshapiro
pshapiro / GoogleTrendsSlopeCalculator.py
Last active May 12, 2020 15:41
Python script to calculate slope from Google Trends
# Requires pandas. For Windows users, I recommend installing the Anaconda Python distirbution.
# Requires the pytrends library. To install, run "pip install pytrends".
from pytrends.pyGTrends import pyGTrends
import time
import os
from random import randint
import pandas as pd
# Add your Gmail username to the google_username variable and your Gmail password to the google_password variable.
google_username = ""
@pshapiro
pshapiro / SearchLove.py
Created April 28, 2016 19:02
Generate interactive keyword research growth matrix with Python + Bokeh plots from CSV file.
# library imports
import pandas as pd
from bokeh.io import output_notebook, show
from bokeh.plotting import figure, output_file, ColumnDataSource
from bokeh.models import HoverTool, BoxAnnotation, BoxSelectTool, BoxZoomTool, WheelZoomTool, ResetTool
from bokeh.resources import CDN
from bokeh.embed import file_html
# Import csv into pandas dataframe, direct to KNIME version to follow
@pshapiro
pshapiro / plot-internal-pr.r
Created April 7, 2016 18:07
Plotting Internal PageRank with 1 to 10 map function
library("igraph")
internallinks <- read.csv("C:/Users/username/folder/screamingfrog-all-inlinks.csv")
g <- graph.data.frame(internallinks)
pr <- page.rank(g, algo = "prpack", vids = V(g), directed = TRUE, damping = 0.85)
values <- data.frame(pr$vector)
write.csv(values, file = "output-pagerank.csv")
map <- function(x, range = c(0,1), from.range=NA) {
if(any(is.na(from.range))) from.range <- range(x, na.rm=TRUE)
@pshapiro
pshapiro / BulkAMPValidator.py
Created February 21, 2017 21:39
AMPBench API Bulk Validator
import requests
import json
import csv
import os
# For details about AMPBench and the API:
# https://github.com/ampproject/ampbench
urlinput = os.path.join(os.path.dirname(__file__), input('Enter input text file: '))
urls = open(urlinput, "r")
@pshapiro
pshapiro / mailchimp.html
Created May 11, 2017 04:45
Example of posting an email subscriber form to MailChimp in AMP using amp-form
<!doctype html>
<html amp>
<head>
<meta charset="utf-8">
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.1.js"></script>
<link rel="canonical" href="http://localhost">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-custom>
@pshapiro
pshapiro / search.html
Created May 12, 2017 21:13
Basic example of using the GET method using amp-form
<form action="https://searchwilderness.com/" method="get" target="_top">
<input name="s" placeholder="Search The Blog" required="" type="text">
<input type="submit" value="Search">
</form>