コード例 #1
0
def google(query, nresults, retry=None):
    """
    Perform a google search and return the first nresults results.

    If a result matches a key in retry, the query is replaced with the value
    of that key.
    """
    page = requests.get(google_api_url, 
                        params={"key": key, "cx": engine, "q": query}
                       ).json()
    data = []

    if page["items"]:
        for keyword in retry or {}:
            if any(keyword in i["title"].lower() 
                   for i in page["items"]):
                return google(retry[keyword], nresults)

        for i, result in enumerate(page["items"]): 
            if i >= nresults: 
                break

            title = unescape(re.sub("</?b>", "", result["htmlTitle"]))
            description = re.sub(r"(\s|<br>)+", " ", 
                                 unescape(re.sub("</?b>", "", 
                                                 result["htmlSnippet"])))
            data.append({"color" : [12, 5, 8, 3][i % 4],
                         "title" : title,
                         "url"   : result["link"],
                         "description": description
                        })
    return data
コード例 #2
0
ファイル: google.py プロジェクト: KnightHawk3/Karkat
def google(query, nresults, retry=None):
    """
    Perform a google search and return the first nresults results.

    If a result matches a key in retry, the query is replaced with the value
    of that key.
    """
    page = requests.get(google_api_url + urllib.quote(query)).json()
    data = []

    if page["responseData"]["results"]:
        for keyword in retry or {}:
            if any(keyword in i["title"].lower() 
                    for i in page["responseData"]["results"]):
                return google(retry[keyword], nresults)

        for i, result in enumerate(page["responseData"]["results"]): 
            if i >= nresults: 
                break

            data.append({"color" : [12, 5, 8, 3][i % 4],
                    "title": unescape(re.sub("</?b>", "", result["title"])),
                    "url"  : result["unescapedUrl"],
                    "description": re.sub(r"\s+", 
                                          " ", 
                                          unescape(re.sub("</?b>", "", 
                                                    result["content"])))})
    return data
コード例 #3
0
ファイル: cah.py プロジェクト: KnightHawk3/Karkat
    def __init__(self, printer, channel, rounds=None, black=[], white=[], rando=False, numcards=10, minplayers=3, bets=True, firstto=None, ranked=False, democracy=False):
        self.printer = printer

        self.lock = threading.Lock()
        self.questions = self.black[:] + black[:]

        # Get questions from reddit
        reddit = requests.get("http://www.reddit.com/r/AskReddit/hot.json", headers={"User-Agent": "Karkat-CardsAgainstHumanity-Scraper"}).json()
        reddit = reddit["data"]["children"]
        titles = [i["data"]["title"] for i in reddit if i["data"]["title"].endswith("?")]
        # 5% of cards max should be reddit cards
        self.questions.extend(titles)

        random.shuffle(self.questions)
        
        self.answers = self.white[:] + white[:]

        # Get trends from Know Your Meme
        memes = requests.get("http://knowyourmeme.com/").text
        memes = re.findall("<h5 class='left'>Also Trending:</h5>(.+?)</div>", memes)
        memes = re.findall(">(.+?)</a>", memes[0])

        self.answers.extend([unescape(i) + "." for i in memes])

        ud = requests.get("http://urbandictionary.com/").text
        ud = re.findall(r"define\.php.*?>(.+?)<", ud)[1:]
        ud = [unescape(i) for i in ud]
        ud = [i[0].upper() + i[1:] + ("." * i[-1].isalpha()) for i in ud]
        self.answers.extend(ud)

        random.shuffle(self.answers)
        
        self.usedanswers = []
        
        self.state = "signups"
        self.channel = channel
        self.rounds = rounds
        self.maxcards = numcards
        self.minplayers = minplayers
        self.bets = not ranked or bets
        self.firstto = firstto
        self.ranked = ranked
        self.democracy = democracy
        
        self.players = []
        self.allplayers = []
        
        self.round = 0
        self.czar = None
        self.question = None
        
        if rando:
            self.addRando()
        else: self.rando = None
コード例 #4
0
ファイル: images.py プロジェクト: svkampen/Karkat
def image(server, msg, flags, query):
    """
    Image search.

    Search for the given terms on Google. If a number is given, it will display
    that result.

    Code adapted from kochira :v
    """

    params = {
        "cx": cfg["img"],
        "key": cfg["key"],
        "searchType": "image",
        "safe": "off",
        "num": deflines[msg.prefix],
        "q": query
    }

    if flags:
        for i in flags[1:].strip():
            if i.isdigit():
                params["num"] = min(int(i), maxlines[msg.prefix])
            else:
                params.update({"f": {"imgType": "face"},
                               "p": {"imgType": "photo"},
                               "c": {"imgType": "clipart"},
                               "l": {"imgType": "lineart"},
                               "g": {"imgType": "animated"},
                               "s": {"safe": "high"}
                }[i])
                

    r = requests.get(
        "https://www.googleapis.com/customsearch/v1",
        params=params
    ).json()

    results = r.get("items", [])

    for i, result in enumerate(results):
        server.lasturl = result["link"]
        yield templates[msg.prefix] % {"color" : [12, 5, 8, 3][i % 4],
                                       "url": url.shorten(unquote(result["link"])),
                                       "fullurl": result["displayLink"],
                                       "width": result["image"]["width"],
                                       "height": result["image"]["height"],  
                                       "content": unescape(re.sub("</?b>", "", 
                                                    result["htmlSnippet"])),
                                       "title": unescape(re.sub("</?b>", "", 
                                                    result["htmlTitle"]))}
    if not results:
        yield "12Google Images│ No results."
コード例 #5
0
ファイル: images.py プロジェクト: KnightHawk3/Karkat
def image(server, msg, flags, query):
    """
    Image search.

    Search for the given terms on Google. If a number is given, it will display
    that result.

    Code adapted from kochira :v
    """

    params = {
            "safe": "off",
            "v": "1.0",
            "rsz": deflines[msg.prefix],
            "q": query
        }

    if flags:
        for i in flags[1:].strip():
            if i.isdigit():
                params["rsz"] = min(int(i), maxlines[msg.prefix])
            else:
                params.update({"f": {"imgtype": "face"},
                               "p": {"imgtype": "photo"},
                               "c": {"imgtype": "clipart"},
                               "l": {"imgtype": "lineart"},
                               "g": {"as_filetype": "gif"},
                               "s": {"safe": "active"}
                }[i])
                

    r = requests.get(
        "https://ajax.googleapis.com/ajax/services/search/images",
        params=params
    ).json()

    results = r.get("responseData", {}).get("results", [])

    for i, result in enumerate(results):
        server.lasturl = result["url"]
        yield templates[msg.prefix] % {"color" : [12, 5, 8, 3][i % 4],
                                       "url": url.shorten(result["url"]),
                                       "fullurl": result["visibleUrl"],
                                       "width": result["width"],
                                       "height": result["height"],  
                                       "content": unescape(re.sub("</?b>", "", 
                                                    result["content"])),
                                       "title": unescape(re.sub("</?b>", "", 
                                                    result["title"]))}
    if not results:
        yield "12Google Images│ No results."
コード例 #6
0
ファイル: button.py プロジェクト: svkampen/Karkat
 def button(self, server, msg):
     nick = msg.address.nick
     # Check if we need any new buttons
     if all(i for i in self.wyps.values()):
         page = requests.get("http://m.willyoupressthebutton.com/").text
         cond = unescape(re.findall('<div class="rect" id="cond">(.+)</div>', page)[0])
         res = unescape(re.findall('<div class="rect" id="res">(.+)</div>', page)[0])
         cond = cond[0].upper() + cond[1:].rstrip(" ").rstrip(".")
         res = res[0].lower() + res[1:]
         wyp = self.wyps.setdefault("%s but %s" % (cond, res), {})
         self.save()
     # Reduce probability of already-answered buttons
     buttons = [i for i in self.wyps if (server.lower(nick) not in self.wyps[i] and i != self.active)]
     self.active[server.lower(msg.context)] = random.choice(buttons)
     return self.display(server.lower(msg.context))
コード例 #7
0
ファイル: cah.py プロジェクト: svkampen/Karkat
def defaultdeck(black, white):
    questions = [
        i.strip() for i in open(datadir + "/black.txt").read().split("\n")
    ] + black
    answers = [
        i.strip() for i in open(datadir + "/white.txt").read().split("\n")
    ] + white
    # Get questions from reddit
    #reddit = requests.get("http://www.reddit.com/r/AskReddit/hot.json", headers={"User-Agent": "Karkat-CardsAgainstHumanity-Scraper"}).json()
    #reddit = reddit["data"]["children"]
    #titles = [i["data"]["title"] for i in reddit if i["data"]["title"].endswith("?")]
    # 5% of cards max should be reddit cards
    #questions.extend(titles)

    # Get trends from Know Your Meme
    #memes = requests.get("http://knowyourmeme.com/").text
    #memes = re.findall("<h5 class='left'>Also Trending:</h5>(.+?)</div>", memes)
    #memes = re.findall(">(.+?)</a>", memes[0])

    #answers.extend([unescape(i) + "." for i in memes])

    ud = requests.get("http://urbandictionary.com/").text
    ud = re.findall(r"define\.php.*?>(.+?)<", ud)[1:]
    ud = [unescape(i) for i in ud]
    ud = [i[0].upper() + i[1:] + ("." * i[-1].isalpha()) for i in ud]
    answers.extend(ud)

    return questions, answers
コード例 #8
0
ファイル: preview.py プロジェクト: svkampen/Karkat
 def preview(self, server, message, url):
     if not url:
         url = server.lasturl
     params = {"SM_API_KEY": self.key, "SM_URL": url, "SM_LENGTH": 1}
     summary = requests.get(self.API_URL, params=params).json()
     try:
         return "12│ " + unescape(summary["sm_api_content"])
     except:
         return summary["sm_api_message"]
コード例 #9
0
ファイル: button.py プロジェクト: svkampen/Karkat
 def button(self, server, msg):
     nick = msg.address.nick
     # Check if we need any new buttons
     if all(i for i in self.wyps.values()):
         page = requests.get("http://m.willyoupressthebutton.com/").text
         cond = unescape(
             re.findall('<div class="rect" id="cond">(.+)</div>', page)[0])
         res = unescape(
             re.findall('<div class="rect" id="res">(.+)</div>', page)[0])
         cond = cond[0].upper() + cond[1:].rstrip(" ").rstrip(".")
         res = res[0].lower() + res[1:]
         wyp = self.wyps.setdefault("%s but %s" % (cond, res), {})
         self.save()
     # Reduce probability of already-answered buttons
     buttons = [
         i for i in self.wyps
         if (server.lower(nick) not in self.wyps[i] and i != self.active)
     ]
     self.active[server.lower(msg.context)] = random.choice(buttons)
     return self.display(server.lower(msg.context))
コード例 #10
0
ファイル: preview.py プロジェクト: RecyclingBin/Karkat
 def preview(self, server, message, url):
     if not url:
         url = server.lasturl
     params = {"SM_API_KEY": self.key,
               "SM_URL": url,
               "SM_LENGTH": 1}
     summary = requests.get(self.API_URL, params=params).json()
     try:
         return "12│ " + unescape(summary["sm_api_content"])
     except:
         return summary["sm_api_message"]
コード例 #11
0
ファイル: cah.py プロジェクト: svkampen/Karkat
def defaultdeck(black, white):
    questions = [i.strip() for i in open(datadir + "/black.txt").read().split("\n")] + black
    answers = [i.strip() for i in open(datadir + "/white.txt").read().split("\n")] + white
    # Get questions from reddit
    #reddit = requests.get("http://www.reddit.com/r/AskReddit/hot.json", headers={"User-Agent": "Karkat-CardsAgainstHumanity-Scraper"}).json()
    #reddit = reddit["data"]["children"]
    #titles = [i["data"]["title"] for i in reddit if i["data"]["title"].endswith("?")]
    # 5% of cards max should be reddit cards
    #questions.extend(titles)

    # Get trends from Know Your Meme
    #memes = requests.get("http://knowyourmeme.com/").text
    #memes = re.findall("<h5 class='left'>Also Trending:</h5>(.+?)</div>", memes)
    #memes = re.findall(">(.+?)</a>", memes[0])

    #answers.extend([unescape(i) + "." for i in memes])

    ud = requests.get("http://urbandictionary.com/").text
    ud = re.findall(r"define\.php.*?>(.+?)<", ud)[1:]
    ud = [unescape(i) for i in ud]
    ud = [i[0].upper() + i[1:] + ("." * i[-1].isalpha()) for i in ud]
    answers.extend(ud)

    return questions, answers
コード例 #12
0
ファイル: images.py プロジェクト: svkampen/Karkat
def image(server, msg, flags, query):
    """
    Image search.

    Search for the given terms on Google. If a number is given, it will display
    that result.

    Code adapted from kochira :v
    """

    params = {
        "cx": cfg["img"],
        "key": cfg["key"],
        "searchType": "image",
        "safe": "off",
        "num": deflines[msg.prefix],
        "q": query
    }

    if flags:
        for i in flags[1:].strip():
            if i.isdigit():
                params["num"] = min(int(i), maxlines[msg.prefix])
            else:
                params.update({
                    "f": {
                        "imgType": "face"
                    },
                    "p": {
                        "imgType": "photo"
                    },
                    "c": {
                        "imgType": "clipart"
                    },
                    "l": {
                        "imgType": "lineart"
                    },
                    "g": {
                        "imgType": "animated"
                    },
                    "s": {
                        "safe": "high"
                    }
                }[i])

    r = requests.get("https://www.googleapis.com/customsearch/v1",
                     params=params).json()

    results = r.get("items", [])

    for i, result in enumerate(results):
        server.lasturl = result["link"]
        yield templates[msg.prefix] % {
            "color": [12, 5, 8, 3][i % 4],
            "url": url.shorten(unquote(result["link"])),
            "fullurl": result["displayLink"],
            "width": result["image"]["width"],
            "height": result["image"]["height"],
            "content": unescape(re.sub("</?b>", "", result["htmlSnippet"])),
            "title": unescape(re.sub("</?b>", "", result["htmlTitle"]))
        }
    if not results:
        yield "12Google Images│ No results."