def acquireJokes(self): #Gets new fact(s) XML_Dict = {"_":"http://www.w3.org/2005/Atom"} log.joke("Obtaining new",self.title+"s") log.network.low("Suppressing network for joke acquisition") try: webContent, code = self.connection.get(self.url, query = self.query, headers = self.headers, timeout = self.TIMEOUT) except OSError: log.web.debug("Socket Timed Out!") return False log.joke.debug("Code Received:",code) if code != 200: return False #Here is where most of the struggle comes from self.onJokeAcquire(webContent, self.jokes) if len(self.jokes) > 0: log.joke.debug("Acquired",len(self.jokes), self.title+"(s)") else: log.joke.error("No",self.title,"jokes were acquired!") return False #Save all jokes we got self.save() return True
def postAllJokes(self, group): log.joke("Posting all",self.title," jokes") jokeCopy = copy.copy(self.jokes) random.shuffle(jokeCopy) counter = 0 for joke in jokeCopy: counter += int(self._postJoke(group, joke)) log.joke("Posted",counter,"/",len(jokeCopy),"jokes")
def getJoke(self): self.load() if len(self.jokes) == 0: if not self.acquireJokes(): return self.defaultJoke #DEFAULT FACT #Will remove jokes so we don't get repeat jokes num = random.randrange(len(self.jokes)) joke = self.jokes.pop(num) self.save() #Record that we removed the fact log.joke("Joke gotten,",len(self.jokes),"remaining") #Add in fun messages joke = (self.makeMessageFun(joke[0]), joke[1]) #If we have a picture, return with a picture, otherwise just the joke #This is always a tuple here, so joke[1] would be None if no pic if joke[1]: return joke return joke[0]
def getJoke(self): #This part is mostly copied from SimpleJoke if len(self._handlers) > 0: joke = None tries = 0 #We will only try a few different handlers while tries < (len(self._handlers) // 2 + 1): #Until we get a proper joke tries += 1 #Pick a handler that hasn't been picked recently choice = random.choice([i for i in range(len(self._handlers)) if i not in self._chosen]) joke = self._handlers[choice].getJoke() if joke: log.joke("Got a joke successfully from",self._handlers[choice]) self._chosen.append(choice) #Add the handler to blacklist if it yielded a joke break else: log.joke.error("Joke get failed from", self._handlers[choice]) #If we have gone through at least 3/4 of the jokes, start removing jokes from the blacklist if len(self._chosen) > (len(self._handlers) * 3 // 4): self._chosen.pop(0) #Will only fire if at least one element in list. No Error. return joke #Will return the joke regardless of us having one or not. Hopefully we got one #If we have no jokes, return the default one return defaultDefaultJoke