Регулярное выражение Coldfusion для замены нового кода Instagram старым

У меня есть блог ColdFusion, где люди могут вставлять встроенные твиты и коды Instagram. Новые коды для встраивания в Instagram отвратительны и вызывают множество дополнительных строк, если кодов для встраивания в Instagram несколько.

Я пытался придумать регулярное выражение в ColdFusion, которое конвертировало бы новый код, то есть это:

<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="4" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://instagram.com/p/ugWQkzgF9R/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_top">&#39;Making this album, we went back and listened to all the music that had brought us into ourselves, then we said, &#39;Now let&#39;s misremember it.&#39; U2 Take On The World. Cover Story, Rolling Stone.</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Una foto publicada por U2 Official (@u2) el <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2014-10-23T18:41:21+00:00">Oct 10, 2014 at 11:41 PDT</time></p></div></blockquote>
<script async defer src="//platform.instagram.com/en_US/embeds.js"></script>

В старый код, т.е. это:

<iframe src="http://instagram.com/p/ugWQkzgF9R/embed/" width="612" height="692" frameborder="0" scrolling="no" allowtransparency="true"></iframe>

Мне не повезло, особенно если в статье более одной встроенной фотографии из Instagram. Мы ценим любые предложения.


person Major Saab    schedule 19.11.2014    source источник
comment
Вы понимаете, что код для встраивания индивидуален для каждого изображения (он содержит подпись к изображению и дату), так что вы не можете просто выполнить операцию поиска и замены? Кроме того, http://instagram.com/p/ugWQkzgF9R/embed/ все еще работает, зачем его менять?   -  person Tomalak    schedule 20.11.2014
comment
При этом вам следует рассмотреть возможность использования их конечной точки OEmbed (прокрутите вниз) вместо того, чтобы мучительно менять действительно уродливый HTML в исходный код вашего блога.   -  person Tomalak    schedule 20.11.2014


Ответы (1)


Это регулярное выражение, которое вам нужно, продемонстрировано на Python:

ss = '<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="4" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://instagram.com/p/ugWQkzgF9R/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_top">&#39;Making this album, we went back and listened to all the music that had brought us into ourselves, then we said, &#39;Now let&#39;s misremember it.&#39; U2 Take On The World. Cover Story, Rolling Stone.</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Una foto publicada por U2 Official (@u2) el <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2014-10-23T18:41:21+00:00">Oct 10, 2014 at 11:41 PDT</time></p></div></blockquote>'

p = re.findall(r'instagram\.com/p/(\w*)/',ss) # This is the actual regex you were looking for

print '<iframe src="http://instagram.com/p/' + p[0] + '/embed/" width="612" height="692" frameborder="0" scrolling="no" allowtransparency="true"></iframe>'

Дайте мне знать, если вам нужна помощь.

person syntagma    schedule 19.11.2014