2010-11-01 4 views
1

У меня есть список объектов, которые среди других бит данных включают дату, и мне нужно создать список всех объектов, где эта дата падает в любое время месяц, т.е. полночь 1-го числа последнего месяца < данные цели < полночь 1-го числа этого месяца.Сокращение списка на основе событий, находящихся между двумя датами

Мне также нужно количество общих объектов, соответствующих этим критериям.

Прямо сейчас, я собираюсь об этом в серии в то время как петли, но я чувствую, что должен быть лучший способ, в частности, так как мой сценарий нависает:

 post = 0 #the current post we're analyzing 
     posts = 0 #the total number of posts in the month we actually care about 
     lastmonthposts = [] #I think i can just get rid of this 
     blog = pyblog.WordPress() 

     date = blog.get_recent_posts(1 + posts)[0]['dateCreated'] 
     while (date > startthismonth): 
      print "So far, there have been " + str(posts) + " posts this month we've counted." 
      post = post + 1 
      date = blog.get_recent_posts(1 + post)[0]['dateCreated'] 
     while (date > startlastmonth): 
      print "So far, there have been " + str(posts) + " posts last month we've counted, which is " + str(date.timetuple().tm_mon) + "." 
      posts = posts + 1 
      post = post + 1 
      date = blog.get_recent_posts(1 + post)[0]['dateCreated'] 
      lastmonthposts.append('blog') 
     for blogpost in lastmonthposts: 
      postnumber = blogpost['postid'] 
      comments = comments + int(blog.get_comment_count(postnumber)['approved']) 

ответ

2

Вместо get_recent_posts() я использование get_page_list():

from datetime import datetime, timedelta 

this_month_start = datetime.now().date().replace(day=1) 
prev_month_start = (this_month_start - timedelta(days=1)).replace(day=1) 

pages = blog.get_page_list() 
last_month_pages = [ 
    p for p in pages 
    if prev_month_start <= p['dateCreated'] < this_month_start] 
last_month_approved_comment_count = sum(
    blog.get_comment_count(page['page_id'])['approved'] 
    for page in last_month_pages) 

print "number of last month's pages:", len(last_month_pages) 
print "number of approved comments for last month's pages:", 
print last_month_approved_comment_count 
+0

Спасибо Константин, это определенно намного проще. Я не понимаю, почему вы предлагаете get_page_list(), хотя, кажется, просто возвращаете «0», поскольку, когда появляются новые сообщения в блоге, новых страниц нет. Работая, чтобы перенастроить его для работы с сообщениями, а затем я отмечу, что вы приняли его. –

+0

@ Майкл Мориси, Хм, у меня сложилось впечатление, что «пост» и «страница» означают то же самое в API. Это неправильное предположение? Вы уверены, что 'blog.get_page_list()' возвращает «0»? Не могли бы вы вставить 'print pages' после' pages = blog.get_page_list() 'и проверить вывод? – Constantin

+0

Большое спасибо за проверку. Нет, сообщения и страницы обрабатываются по-разному в WP. Я дважды проверил с вашим предложением печати, и он распечатал страницу. Однако заменяя это на pages = blog.get_recent_posts(), вы можете распечатать материал, на который я хочу посмотреть, но я все равно получаю все 0, даже если команда печати печатает правильный пост. Собираюсь проверить и посмотреть, не искал ли я дату. –

 Смежные вопросы

  • Нет связанных вопросов^_^