[微信查询接口] 古城钟楼微博地支报时程序铛,100行代码实现,价值一天20万粉丝

[复制链接]
发表于 2014-2-4 03:09:19 | 显示全部楼层 |阅读模式
大家最近都在热议古城钟楼的红火。不是加V号、不是官方号、不是皇冠会员。没有拟人化,没有段子、没有运营。1天之内从1万不到的粉丝新增了20多万并且还在持续传播和增长粉丝。我不研究它是怎么红起来的,但写个类似的程序实现它却很容易,程序才100行左右:
如果看不懂下面的代码,可以去看看这个 [科普贴]古城钟楼的微博报时是如何实现的?
! Q/ w8 O9 H& s! M  m) n
先来普及一下地支时间与北京时间的对应关系:
  • 【子时】夜半,又名子夜、中夜:十二时辰的第一个时辰。(北京时间23时至次日01时)。
  • 【丑时】鸡鸣,又名荒鸡:十二时辰的第二个时辰。(北京时间01时至03时)。
  • 【寅时】平旦,又称黎明、早晨、日旦等:时是夜与日的交替之际。(北京时间03时至05时)。
  • 【卯时】日出,又名日始、破晓、旭日等:指太阳刚刚露脸,冉冉初升的那段时间。(北京时间05时至07时)。
  • 【辰时】食时,又名早食等:古人“朝食”之时也就是吃早饭时间,(北京时间07时至09时)。
  • 【巳时】隅中,又名日禺等:临近中午的时候称为隅中。(北京时间09时至11时)。
  • 【午时】日中,又名日正、中午等:(北京时间11时至13时)。
  • 【未时】日昳,又名日跌、日央等:太阳偏西为日跌。(北京时间13时至15时)。
  • 【申时】哺时,又名日铺、夕食等:(北京时间15时至17时)。
  • 【酉时】日入,又名日落、日沉、傍晚:意为太阳落山的时候。(北京时间17时至19时)。
  • 【戌时】黄昏,又名日夕、日暮、日晚等:此时太阳已经落山,天将黑未黑。天地昏黄,万物朦胧,故称黄昏。(北京时间19时至21时)。
  • 【亥时】人定,又名定昏等:此时夜色已深,人们也已经停止活动,安歇睡眠了。人定也就是人静。(北京时间21时至23时)。
    # k- D# e3 h; u" w6 O2 ^
: K6 q! {' ~1 T! U2 J
然后我们来分析一下它昨天发布的内容
  • 1月8日00:00来自Weico.iPhone 【子时】
  • 1月8日02:00来自Weico.iPhone 【丑时】铛~铛~
  • 1月8日04:00来自Weico.iPhone 【寅时】铛~铛~铛~铛~
  • 1月8日06:00来自Weico.iPhone 【卯时】铛~铛~铛~铛~铛~铛~
  • 1月8日08:00来自Weico.iPhone 【辰时】铛~铛~铛~铛~铛~铛~铛~铛~
  • 1月8日10:00来自Weico.iPhone 【巳时】铛~铛~铛~铛~铛~铛~铛~铛~铛~铛~
  • 1月8日12:00来自Weico.iPhone 【午时】
  • 1月8日14:00来自Weico.iPhone 【未时】铛~铛~
  • 1月8日16:00来自Weico.iPhone 【申时】铛~铛~铛~铛~
  • 1月8日18:00来自Weico.iPhone 【酉时】铛~铛~铛~铛~铛~铛~
  • 1月8日20:00来自Weico.iPhone 【戌时】铛~铛~铛~铛~铛~铛~铛~铛~
  • 1月8日22:00来自Weico.iPhone 【亥时】铛~铛~铛~铛~铛~铛~铛~铛~铛~铛~8 i- d3 f  d5 D- q7 [& h: @
7 q& B  |2 U+ y8 X8 b
根据上面,得出它有以下规律:
  • 每两个小时发布一条微博,
  • 发布时间是偶数小时的0分,这个时间并不是地支时间的开始时间,而是正中间的那个时间点
  • 内容是相应的地支时间,加上根据时间而变化的“铛~”的次数,
  • “铛~”的次数与时有关,12小时以前与小时相同,12小时以后与[小时减12]相同。
    / r0 |! ~+ B/ ?
西安钟楼里的钟就是这样敲的吗?去过钟楼一次,没登上去,也没注意。
  T, O; B7 I, E; k3 U/ r4 V7 _
完整代码如下:
需要自行修改App相关值:
4 d' |0 f1 J) l& X; m

  1. * i+ \7 g7 e5 h+ a5 d  o
  2. <p style="font: 14px/25px verdana, Arial, Helvetica, sans-serif; margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="margin: 0px; padding: 0px; color: rgb(255, 0, 0);"></span> </p>
复制代码
  1. using System;( W& Z$ b1 ?! h
  2. using System.Collections.Generic;
    0 e( b4 x+ D9 J) C) e$ t7 v
  3. using System.Text;
    2 `1 b; h- M5 A' D1 K( X
  4. using NetDimension.Weibo;
    3 v1 w! f4 Y' E6 s
  5. using System.Timers;
    ) W4 m. L; v$ a" G- R
  6. using System.Globalization;  Y) r8 R. Q+ J
  7. ( s& U8 P7 C! t4 {# _
  8. namespace WeiboTimer( K& W8 I2 |5 @, p0 m( B) w, i
  9. {
    ) f8 Y) {7 i  V6 y/ j0 x6 o# M
  10.     class Program
    & w) ]7 a; O! W1 A
  11.     {) J, S+ m5 f9 g% [
  12.         static string AppKey = "********";$ i- K5 J4 D: a
  13.         static string AppSecret = "*******";$ h/ J" J2 q0 r
  14.         static string CallbackUrl = "****************";
    . U% b( l! u" b& k2 g$ I
  15.         static Timer t = new Timer();% c# ?2 t. y  @4 w; v
  16.         static OAuth oauth = null;
    * ~# K, E( l" O6 H' E9 w
  17.         static Client Sina = null;  T6 G, \; I5 V

  18. 5 a0 V; N( G' G$ N. M8 o1 a
  19.         static void Main(string[] args); r7 I" ?2 K6 C( K  J9 B
  20.         {            
    0 {4 O+ R* c% x2 ]# a2 b
  21.             oauth = Authorize();
    & i* P  y. N: }0 d* ]5 {
  22.             if (!string.IsNullOrEmpty(oauth.AccessToken)){Console.Write("登录成功!");}) y9 P% W4 b( c8 M! H& Z

  23. 2 q2 E& E1 {; j$ i8 [
  24.             Sina = new Client(oauth);$ W: ^$ t7 ]& z( V% x
  25.             string uid = Sina.API.Entity.Account.GetUID();
    , Q; K6 X5 P7 L5 I$ }
  26.             var entity_userInfo = Sina.API.Entity.Users.Show(uid);
    , U1 F9 i7 v' \5 w
  27.             Console.WriteLine("昵称:{0},微博地址:http://weibo.com/{1}", entity_userInfo.ScreenName, entity_userInfo.ProfileUrl);& }9 \2 I( B( g
  28. ( i* v9 z5 ?) y+ q6 |
  29.             try' S! U4 x' \) X  ?
  30.             {
    + l' ?; |$ h; y8 \" u+ e
  31.                 t.Interval = 1000 * 60;     //设置间隔时间为1分钟
    2 b8 S* b6 o4 `- {$ z5 c2 v: z3 g
  32.                 t.Elapsed += new ElapsedEventHandler(TimerElapsedEvent); //到达时间的时候执行事件; & O9 w0 ^, ~9 F% E4 `+ K
  33.                 t.AutoReset = true;         //设置是执行一次(false)还是一直执行(true); 8 ~& @" m/ w* ?! @  a2 n
  34.                 t.Start();                  //启动Timer对象; 9 ?0 o& Q# T+ J' d( O
  35.             }
    " s" V* ~+ f# N2 a! k/ D7 d
  36.             catch (Exception ex)
    # S( a; f/ _3 A1 r1 X
  37.             {
    . E9 E2 s8 ^* g+ ?
  38.                 Console.WriteLine("定时任务异常:" + ex.Message);- e$ l1 m5 `0 `4 b4 C" F0 c
  39.                 t.Stop();
    ; ]  K2 \: M% h* A, T
  40.             }1 G6 J2 r. V) A. |
  41.             Console.WriteLine("定时任务开始工作。。。");
    % k) d, u0 B* O( Y7 o7 \0 Z
  42.             Console.ReadKey();
    ! g3 c" v- J- @/ ~" t  j( _, l
  43.         }
    # |% N6 \) \. H

  44. 6 O% j$ t3 A" b
  45.         static OAuth Authorize()% O6 S5 s* Q0 [8 h6 E8 \
  46.         {
    * s, t( m! d2 d, L3 }
  47.             OAuth o = new OAuth(AppKey, AppSecret, CallbackUrl);
    - n4 X4 b$ I3 T5 v+ x; `
  48.             while (!ClientLogin(o))  J" U. O+ i. a+ L- Q' r% h
  49.             {
    0 I" R$ m; Z, P
  50.                 Console.WriteLine("登录失败,请重试。");* n( t2 k* A9 Z) d/ ~' h
  51.             }
    " W  @/ \. u# t" \2 k
  52.             return o;; R9 ~7 k8 P- L8 m
  53.         }0 X/ d5 ~9 V' X$ I. d6 U4 ]$ I4 t4 g% U

  54. ( s5 b7 S6 q1 y# |4 N9 [# Z4 O
  55.         private static bool ClientLogin(OAuth o)
    2 @3 b9 }$ b4 `* Z  B
  56.         {2 g) T) t/ `3 _/ N
  57.             Console.Write("微博账号:");* X6 [+ Q3 u) G" G, c8 F
  58.             string account = Console.ReadLine();4 h: E* M+ T) w- j7 T0 ?* g
  59.             Console.Write("登录密码:");
    6 g) }. x2 t: A* {* a( B- y
  60.             ConsoleColor originColor = Console.ForegroundColor;
    0 R5 G) q$ w. I( e9 v% `$ ?
  61.             Console.ForegroundColor = Console.BackgroundColor; //知道这里是在干啥不?其实是为了不让你们看到我的密码^_^
    0 O, O5 \0 v, Y0 E+ ]; J3 V
  62.             string password = Console.ReadLine();
    ; z5 K3 m( g0 C( M1 Q
  63.             Console.ForegroundColor = originColor; //恢复前景颜色。9 `1 d) Y- e8 Q) |
  64.             return o.ClientLogin(account, password);
    ; R3 z/ {6 ~" u
  65.         }2 W) b" v: x. n2 t

  66. 9 u( K/ L1 I/ g' }0 f3 \6 d! S
  67.         static void TimerElapsedEvent(object sender, ElapsedEventArgs e)7 v9 ]7 m8 @/ C8 j
  68.         {
    5 O1 ~. d3 \9 n  _
  69.             DateTime iNow = DateTime.Now;
    ; a+ Y* K1 q9 A* W' V$ Z, A8 T0 o
  70.             try
    " |0 b$ K5 r) p! R# ?- ^
  71.             {
    5 F- O' A4 p0 w6 Z4 q5 E  |
  72.                 string content = makeContent(iNow.Hour, iNow.Minute);6 Z3 o: `2 ~% h  W7 N
  73.                 if (!string.IsNullOrEmpty(content))9 {, I9 e, F5 {
  74.                 {/ U, P' c9 f4 k  Z% q
  75.                     var statusInfo = Sina.API.Entity.Statuses.Update(content);# V1 u/ L5 H$ K" N  d( [* A
  76.                     DateTime dtCreate = DateTime.ParseExact(statusInfo.CreatedAt, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);3 Z$ g+ T$ G1 E1 L) W6 |
  77.                     Console.WriteLine("本机时间:{0}, 微博时间:{1}, 发布内容:{2}", string.Format("{0:G}", iNow), string.Format("{0:G}", dtCreate), statusInfo.Text);) I: [. \$ k% ]" U5 _- s- e% a
  78.                 }6 F! [( |; g2 {
  79.             }9 o( F, w2 I* ~+ n6 [- D
  80.             catch (Exception ex)
    . \; g4 Z9 I  v2 l/ Y/ k
  81.             {  E, H. T& q- }6 N
  82.                 Console.WriteLine("定时任务异常:" + ex.Message);& t5 P4 S. P$ B
  83.             }; f- a. d, t( B! m2 b. ^
  84.         }
    $ e- z% ~; g7 l2 x. A- @

  85. 2 j2 j3 G; A6 F1 c$ b4 L! U+ v
  86.         static string makeContent(int hour24, int minute)1 n+ P; |9 p4 V
  87.         {
    " o6 p$ G. b5 L) O* ~
  88.             string[] diZhi = "子|丑|寅|卯|辰|巳|午|未|申|酉|戌|亥".Split('|');( c& O6 }" s" `
  89.             string extWeibo = "";
    " H- I, \. v% z& y' I$ q& K$ S
  90.             if (hour24 % 2 == 0 && minute == 0). C2 d/ L: L. J# o
  91.             {
    ' d$ u) u/ b% e
  92.                 for (int i = 0; i < ((hour24 >= 12)? (hour24 - 12): hour24); i++)
    ! @, Y! u7 \% s( G: c
  93.                 {/ {* C2 l  c! X6 u
  94.                     extWeibo += "铛~";
    ' f) p- m+ E: l7 ^8 y
  95.                 }
    % j1 Y* O3 B( `! K& f+ m9 b
  96.                 return "【" + diZhi[hour24 / 2] + "时】" + extWeibo;
    ( R9 {4 b" _6 p# ?1 P% F7 O- ?# o6 x
  97.             }
    6 f8 g& _( `4 V2 X* n/ V% n7 \, @
  98.             else. D5 q- r: S5 v7 h% u- P6 K  H
  99.             {
    4 E9 o! Q) f: o* r& T
  100.                 return "";
    3 `0 `1 D) A% ?, Y5 p$ w
  101.             }
    % P* {& F9 D, w6 {
  102.         }
    , L) ]9 M  Q. q+ Q' `, }5 }
  103.     }
    * K$ {& {  `9 s! J. f
  104. }
复制代码
完整程序下载:
运行前需要安装.NET Framework。 点击这里下载.NET Framework 4 并安装,这个有40多M
! c# S8 F; D: v2 z4 g. ~( p- S6 k然后下载我的程序:guchengzhonglou.rar (已经内置Weico.iPhone了哦,亲)
8 `3 |( m* z1 g; j1 X  y1 P* J
- F8 T- r/ p/ E# V




上一篇:微信支付
下一篇:微信公众平台开发(66)人品计算
回复

使用道具 举报

发表于 2014-3-4 21:23:23 | 显示全部楼层
这呢吗啊啊
回复 支持 反对

使用道具 举报

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表