import json import random from datetime import datetime def interleave_papers_by_interest(all_papers_by_interest): """ Interleave papers round-robin style across interests. Returns a flat list cycling through: Interest1[0], Interest2[0], ..., Interest1[1], Interest2[1], ... """ # Shuffle papers within each interest category for interest_name in all_papers_by_interest: random.shuffle(all_papers_by_interest[interest_name]) # Interleave round-robin interleaved = [] interest_names = list(all_papers_by_interest.keys()) max_papers = max(len(papers) for papers in all_papers_by_interest.values()) if all_papers_by_interest else 0 for i in range(max_papers): for interest_name in interest_names: papers = all_papers_by_interest[interest_name] if i < len(papers): # Add interest category to paper data papers[i]['interest_category'] = interest_name interleaved.append(papers[i]) return interleaved def generate_tiktok_html(interleaved_papers): """Generate self-contained TikTok-style feed HTML with embedded data.""" papers_json = json.dumps(interleaved_papers, indent=2, ensure_ascii=False) date_str = datetime.now().strftime('%B %d, %Y') html = f""" Research Feed • {date_str}
♄ 0 liked
ā™”
↓ Scroll to explore
""" return html def save_tiktok_feed(all_papers_by_interest, filename='tiktok_feed.html'): """ Generate and save TikTok-style feed from papers data. Called by main.py after fetching papers. """ # Interleave papers round-robin interleaved = interleave_papers_by_interest(all_papers_by_interest) print(f"\nšŸ”„ Interleaved {len(interleaved)} papers across {len(all_papers_by_interest)} interests") # Generate HTML html = generate_tiktok_html(interleaved) # Save file with open(filename, 'w', encoding='utf-8') as f: f.write(html) print(f"✨ TikTok feed saved to {filename}") print("šŸ“± Sync with your phone and open in browser!")